如何用jQuery定义函数参数

时间:2012-10-23 12:35:58

标签: javascript jquery

我有一些语法问题......这是我的小脚本:

$('.basket_details, .advanced_search_panel, .producers_major_panel').hover(function () {
    mouse_is_inside = true;
}, function () {
    mouse_is_inside = false;
});
$("body").mouseup(function () {
    if (mouse_is_inside) {
        $('.advanced_search_panel, .producers_major_panel').fadeOut('slow');
        $('.basket_details').slideUp('slow');
    }
});

一切都很好,但我的Chrome控制台尖叫着我有语法错误,mouse_is_inside没有定义,如何纠正这个错误?

6 个答案:

答案 0 :(得分:7)

尝试关闭:

(function() {

  var mouse_is_inside = false;

$('.basket_details, .advanced_search_panel, .producers_major_panel').hover(function () {
    mouse_is_inside = true;
}, function () {
    mouse_is_inside = false;
});
$("body").mouseup(function () {
    if (mouse_is_inside) {
        $('.advanced_search_panel, .producers_major_panel').fadeOut('slow');
        $('.basket_details').slideUp('slow');
    }
});

})();

这将允许您在函数范围内使用'mouse_is_inside'。它还会阻止您使用全局。

答案 1 :(得分:2)

你必须添加

var mouse_is_inside = false;

在代码的开头,将其标记为全局变量。

答案 2 :(得分:0)

您的mouse_is_inside变量不是全局的。您需要在函数之外为两个集合定义它才能访问它。

示例:

var mouse_is_inside = false;

$('.basket_details, .advanced_search_panel, .producers_major_panel').hover(function () {
    mouse_is_inside = true;
}, function () {
    mouse_is_inside = false;
});
$("body").mouseup(function () {
    if (mouse_is_inside) {
        $('.advanced_search_panel, .producers_major_panel').fadeOut('slow');
        $('.basket_details').slideUp('slow');
    }
});

答案 3 :(得分:0)

全局窗口范围中定义变量mouse_is_inside。 所以它可以在所有功能中使用。

如果您需要限制范围

,请按照@Lloyd的建议尝试关闭

答案 4 :(得分:0)

试试这个:

$(document).on({
    mouseenter: function () {
        mouse_is_inside = true;
    },

    mouseleave: function () {
        mouse_is_inside = false;
    }
}, '.basket_details, .advanced_search_panel, .producers_major_panel');

$("body").mouseup(function () {
    if (mouse_is_inside) {
        $('.advanced_search_panel, .producers_major_panel').fadeOut('slow');
        $('.basket_details').slideUp('slow');
    }
});

答案 5 :(得分:0)

在这个例子中根本不需要使用变量mouse_is_inside(除非你在其他函数中用它做其他的事情,最好将它完全删除,因为它的效率较低而且只会使代码混乱)。在你的例子中使用它只是按以下方式调用另一个函数

$(document).ready(function(){
$('.basket_details, .advanced_search_panel, .producers_major_panel').hover(function () {
            /*add the mouse_is_inside=false; here if you need it for other functionality but dont use it for hide your panels*/
    fold(); /*calling this function works just like your example but it fixes the problem and makes you use 1 less variable which is better*/
});
function fold(){
$("body").mouseup(function () {
        $('.advanced_search_panel, .producers_major_panel').fadeOut('slow');
        $('.basket_details').slideUp('slow');
});
}

});

您还可以使用click实现相同的功能,因为您必须将鼠标悬停在元素上才能单击它。 (如果其他函数调用点击等,可能有时候这不是真的,但希望在你的例子中它仍然可以完成这项工作)

$('.basket_details, .advanced_search_panel, .producers_major_panel').click(function(){
        $('.advanced_search_panel, .producers_major_panel').fadeOut('slow');
        $('.basket_details').slideUp('slow');
});

GlŁukasz,

NiechMocbędzieztobą