我有一些语法问题......这是我的小脚本:
$('.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
没有定义,如何纠正这个错误?
答案 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ą