2015-01-26 42 views
0

我有一個搗鼓你:http://jsfiddle.net/pneebntd/3/專注僅在文檔加載時觸發,而不再一次?

$(document).ready(function(){  
    $('#Address').focusout(ValidateAddress($(this).val(), "address")); 
    $('#City').focusout(ValidateAddress($(this).val(), "city")); 
    $('#State').focusout(ValidateAddress($(this).val(), "state")); 
    $('#Zipcode').focusout(ValidateAddress($(this).val(), "zip/postal code")); 
    $("#StateList").change(ValidateAddress($(this).val(), "state")); 
}); 

function ValidateAddress(location, label) { 
    console.info("made it there : " + location + " " + label); 
} 

這樣做的缺點是,我(想)當控制失去了焦點附加的功能,我想運行的事件處理程序(或者當下拉列表更改值時)。

寫入的方式會在頁面加載時觸發,但不會在此之後再次觸發。我之前做過這個,但也許只是因爲它是星期一,但是......我在這裏做錯了什麼?

+1

閱讀[focusout](http://api.jquery.com/focusout/)的文檔。 – epascarello 2015-01-26 18:48:12

+1

我想知道爲什麼有人低估了這個問題。它有一個運行的例子,解釋出了什麼問題以及預期的行爲。僅僅因爲這是一個愚蠢的錯誤,並不是一個壞問題。 – 2015-01-26 18:59:34

回答

4

此代碼

$('#Address').focusout(ValidateAddress($(this).val(), "address")); 

電話ValidateAddress並將其返回值到focusout,完全相同的方式foo(bar())電話bar並將其返回值到foo

如果你想給函數focusout,你必須這樣做。例如:

$('#Address').focusout(function() { 
    ValidateAddress($(this).val(), "address"); 
}); 

該代碼創建了一個新的匿名函數,並將該函數引用到focusout。當事件發生時,它會調用您的ValidateAddress函數。

+0

當你將不是函數的東西傳遞給事件處理函數設置函數時,jQuery不應該抱怨嗎? – 2015-01-26 18:52:09

+0

我發誓,有些日子我甚至不應該觸摸鍵盤。感謝您的支持。 – MetalPhoenix 2015-01-26 18:53:34

+1

@JuanMendes:檢查可能不值得的開銷。例如,我的猜測是'ValidateAddress'里根本沒有'return'。所以調用它會導致'undefined'。所以我們將'undefined'傳遞給'focusout'。這是一個**很多**,就像調用'focusout'沒有任何參數,這應該觸發事件。檢查將需要使用'arguments'僞數組,如下所示:'if(!handler && arguments.length> 0)'。除了膨脹之外,它們不需要在如此大的庫中,在一些使用函數中的'arguments'的引擎上顯着*減慢了函數的速度。 – 2015-01-26 18:58:52

相關問題