2012-10-23 105 views
0

我有一些語法問題......這是我的小腳本:如何定義功能參數與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'); 
    } 
}); 

一切都很好,但我的鉻控制檯尖叫,我有語法錯誤,mouse_is_inside沒有定義,如何糾正這個錯誤?

+0

通過定義上面的'mouse_is_inside'?與'var mouse_is_inside;'語句? –

+0

是mouse_is_inside在代碼中的其他任何位置聲明/初始化的嗎?由於缺少關鍵字'var',它正在尋找名稱爲mouse_is_inside的全局變量,並且可能找不到它。 – ntlarson

回答

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' 的。它也阻止你需要使用全球。

+0

thx男人,這個作品完美! – Lukas

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

你必須在你的代碼,將其標記爲全局變量的開頭添加

var mouse_is_inside = false; 

0

定義變量mouse_is_inside在全局窗口範圍。 所以它可以在所有功能中訪問。

或試圖關閉通過作爲@Lloyd建議,如果你需要一個限制範圍

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

使用該變量mouse_is_inside在所有在這個例子中(除非你在其他函數中做了其他事情,所以最好全部刪除它,因爲它效率較低,只會混淆代碼),在任何情況下都不要在你的例子中使用它,只需調用另一個f恩膏以下列方式

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

胃腸盧卡斯,

Niech莫克będziež鳥羽