我有一些语法问题...这是我的小脚本:
$('.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ą