2013-01-10 58 views
2

在jQuery的手冊本身就說明了blur功能:爲什麼在jQuery API文檔中使用參數列出處理函數?

.blur(handler(eventObject)) // PLUS 2 OTHER VARIATIONS 

所以我使用這個功能,你會得到這樣的:

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    </head> 
    <body> 
    <form> 
     <input id="target" type="text" value="Field 1" /> 
     <input type="text" value="Field 2" /> 
    </form> 
    <div id="other">Trigger the handler</div> 
    <script> 
     $('#target').blur(myhandler(evObj)); 

     function myhandler(evObj) { 
     console.log(evObj); 
     }; 
    </script> 
    </body> 
</html> 

$('#target').blur(myhandler(evObj));是不正確的語法正確的語法實際上是$('#target').blur(myhandler);

因此整體腳本標記的整個代碼應該是:

<script> 
    $('#target').blur(myhandler); 

    function myhandler(e) { 
    console.log(e); 
    }; 
</script> 
  1. 這是爲什麼?
  2. 某人應該怎​​麼知道不要寫.blur(handler(eventObject))
+1

如果您想使用返回的值,請使用functionname()。在這種情況下,你不需要。 – Johan

+0

錯誤的文檔。 http://docs.jquery.com/Events/blur – Popnoodles

+0

哦,我明白你的意思,它不會明確表示它通過它。公平的問題 – Popnoodles

回答

1

在JavaScript中,函數只是另一種類型的對象。你已經偶然發現編寫myfunctionmyfunction()之間的巨大差異 - 第一個是函數對象,第二個是該函數的返回值。

所以:$('#target').blur(...)是接受一個對象的方法,其中必須是是一個函數。

當你寫$('#target').blur(myhandler(evObj)),那麼myhandler功能不傳遞給.blur()。相反,後面的括號告訴JavaScript評估函數(使用參數evObj),函數的返回值改爲傳遞給.blur()

如果返回值碰巧是另一個函數對象,那麼一切都很好。但是,如果沒有,你會得到一個錯誤。

但是,通常情況下,開發人員不會聲明一個單獨的函數myhandler。相反,我們將使用一個匿名函數像這樣:

$('#target').blur(function(evObj) { 
    /* do stuff with evObj */ 
}) 

這就是爲什麼 API文檔編寫$('#target').blur(myhandler(evObj)) - 所以開發商知道哪些參數是由匿名處理函數接受。

3

你是正確的,因爲技術上正確的語法是

blur(handler) 

然而,這實際上不是非常有用的,因爲如果你看的文檔,你可能想知道什麼論據處理程序收到。它的意思是顯而易見的,你叫blur功能作爲其唯一的參數,所以jQuery的文檔面值安博德符號

blur(handler(eventObj)) 

,表明處理函數接受一個參數,該事件對象。

相關問題