如何使用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没有定义,如何纠正此错误?

尝试闭合:

(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');
    }
});
})();

这将允许您在功能范围内使用"鼠标_is_inside"。它还阻止您需要使用全局。

您必须添加

var mouse_is_inside = false;

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

您的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');
    }
});

全局窗口范围中定义变量鼠标_is_inside。因此,在所有功能中都可以访问。

或使用闭合,如@lloyd所建议的,如果您需要限制范围

尝试以下方法:

$(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');
    }
});

在本示例中根本不需要使用变量鼠标_is_inside(除非您使用其他功能执行其他操作,以便将其完全删除为效率较低,并且仅剪断它该代码)在任何case中都不使用示例中只需以以下方式调用另一个函数

$(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');
});
}
});

您还可以使用单击达到相同的功能,因为您必须在单击它之前悬停在元素上。(如果其他函数调用单击等,可能有时可能不正确,但希望在您的示例中仍然可以完成工作)

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

glukasz,

niech mocbędzieztobą

最新更新