0

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

$('.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没有定义,如何纠正这个错误?

4

6 回答 6

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”。它还阻止您使用全局变量。

于 2012-10-23T12:37:45.417 回答
2

你必须添加

var mouse_is_inside = false;

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

于 2012-10-23T12:37:51.780 回答
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');
    }
});
于 2012-10-23T12:37:38.070 回答
0

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

或者如果您需要受限范围,请尝试使用@Lloyd 建议的Closure

于 2012-10-23T12:41:08.000 回答
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');
    }
});
于 2012-10-23T12:43:23.013 回答
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');
});

格鲁卡斯,

Niech Moc będzie z tobą

于 2012-10-23T15:15:47.843 回答