2011-02-16 70 views
2

我有類似如下..有人可以解釋爲什麼這是傳遞一個對象

$(document).ready(function() { 
    $('#doReport').click(doReport); 
}); 

function doReport(type) { 
    if (type === undefined) { 
     type = 'blah'; 
    } 
    alert (type); 
} 

如果我運行從一無所有它的JavaScript控制檯或獨立doReport(),它將返回「嗒嗒'(如預期的那樣),很明顯,如果我打電話給doReport('wibble');,它會返回'wibble',就像你期望的那樣。

但是,如果我通過點擊與ID將DoReport元素(利用我。就緒設置綁定),則返回[對象的對象]

我不明白爲什麼會這樣運行它。

回答

1

這是因爲事件處理程序是通過作爲第一個參數傳遞的對象(具體來說,event對象)觸發的。

這是你看到這樣的語法

$('#doReport').click(function(e) { 

如果你想打電話給你的函數不帶任何參數,你需要創建一個包裝功能部件這樣做的原因:

$(document).ready(function() { 
    $('#doReport').click(function() { 
     doReport(); 
    }); 
}); 
7

jQuery庫將事件處理程序傳遞給「事件」對象。它將永遠在那裏。它是本地瀏覽器對象的「包裝」或「固定」版本,使它更容易處理。

Here是這些對象的文檔。

另外值得注意的是,jQuery將調用您的處理函數,使得this引用正在調用處理程序的DOM元素。

此外,正如@ Ericson578指出的一個很好的評論,jQuery允許設置其他參數,這意味着您的處理程序可能會通過附加的參數。如果您將單個事件處理函數綁定到不同的元素,那麼這可能很有用,但是您希望通過一些不同的標誌或任何基於元素的特定屬性來限定其行爲。

+0

,我想補充的唯一事情是,你還可以用函數一起綁定數據:http://api.jquery.com/click/ – Ericson578 2011-02-16 16:15:35

0

當jQuery調用作爲參數傳遞的函數進行單擊時,它將事件對象作爲參數傳遞,因此您將獲得[object Object]的警報。 檢查:

http://api.jquery.com/click/

0

JQuery - .click()

。點擊(處理器(eventObject)傳遞) 處理器(eventObject)傳遞函數在每次事件觸發時執行。

您的doReport()函數正在獲取事件對象。

0

如果您需要將參數傳遞給函數,請用另一個函數包裝它。

$(document).ready(function() {  
    $('#doReport').click(function(event){ 
     doReport('blah'); 
    }); 
}); 
相關問題