2016-12-05 68 views
0

我想弄清楚如何將變量傳遞給jQuery函數,但我不知道爲什麼這個(大大簡化的)示例不能按預期工作。這個想法是,點擊複選框時會顯示一條警報。通過變量傳遞負載時執行jQuery函數

沒有問題就在這裏:

<input type="checkbox" class="check"/> 

<script> 

    do_alert = function() { 
    alert("Welcome"); 
    } 

    $('.check').change(do_alert); 

</script> 

然而,通過警報文本的功能時,則只要加載頁面顯示的警報,用正確的消息文本:

<input type="checkbox" class="check"/> 

<script> 

    do_alert = function(message) { 
    alert(message); 
    } 

    $('.check').change(do_alert("Welcome")); 

</script> 

如下所示:

<input type="checkbox" class="check"/> 

<script> 

    function do_alert(message) { 
    alert(message); 
    } 

    $('.check').change(do_alert("Welcome")); 

</script> 

在這兩種情況下,在檢查框時都不執行該功能,但它已打開加載頁面。我在這裏錯過了什麼?

+1

'change'需要一個函數作爲參數,但是通過使用'do_alert(「Welcome」)''你正在調用該函數並且只傳遞其未定義的結果 – haim770

回答

2

之所以$('.check').change(do_alert);作品是因爲你傳遞一個參考do_alert功能的change事件處理程序,並在需要時該事件處理程序執行do_alert()$('.check').change(do_alert("Welcome"));不起作用的原因是因爲您正在執行do_alert函數,而不是在此情況下將其作爲參考傳遞。爲了傳遞參數,你需要換你的函數調用一個匿名函數,像這樣:

$('.check').change(function(){ 
    do_alert("Welcome"); 
}); 

會發生什麼事還有就是你正在創建一個匿名函數(function() { ... }),但你不執行它(因爲在函數定義之後沒有括號)。所以你傳遞了一個對你的匿名函數的引用,這是你的事件處理程序所期望的。

2

您可以試試這種方式。

$(document).ready(function() { 
 
    
 
    do_alert = function(param) { 
 
    alert(param); 
 
    } 
 
    $('.check').change(function() { 
 
     do_alert("Welcome"); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" class="check"/>