[英]Can someone explain why this is passing in an object
我有類似以下的東西..
$(document).ready(function() {
$('#doReport').click(doReport);
});
function doReport(type) {
if (type === undefined) {
type = 'blah';
}
alert (type);
}
如果我從控制台運行doReport()
或在javascript中獨立運行doReport()
,它將返回'blah'(如預期的那樣),顯然如果我調用doReport('wibble');
它會像你期望的那樣返回'wibble'。
但是如果我通過單擊帶有ID doReport的元素來運行它(利用我在.ready中設置的綁定),它將返回[object Object]
我不明白為什么會這樣。
jQuery庫為您的事件處理程序傳遞一個“事件”對象。 它將永遠存在。 它是本機瀏覽器對象的“包裝”或“固定”版本,使其更容易處理。
這是這些對象的文檔。
另外值得注意的是,jQuery將調用您的處理程序函數,以便this
引用要為其調用處理程序的DOM元素。
另外,正如@ Ericson578在評論中指出的那樣,jQuery允許設置其他參數,這意味着您的處理程序可能會傳遞其他參數。 如果你有一個單獨的事件處理函數綁定到不同的元素,那么這可能是有用的,但你想根據元素的細節用一些不同的標志或其他任何標准來限定它的行為。
事件處理程序接收event
對象作為參數。
這是因為事件處理程序是作為第一個參數傳遞的對象(特別是event
對象)觸發的。
這就是你看到這樣的語法的原因
$('#doReport').click(function(e) {
如果要在沒有任何參數的情況下調用函數,則需要創建一個包裝函數來執行此操作:
$(document).ready(function() {
$('#doReport').click(function() {
doReport();
});
});
當jQuery將作為參數傳遞的函數調用為click時,它將事件對象作為參數傳遞,因此您將獲取警報作為[object Object]。 檢查一下:
.click(handler(eventObject))handler(eventObject)每次觸發事件時執行的函數。
你的doReport()
函數正在獲取一個事件對象。
如果需要將參數傳遞給函數,請用另一個函數包裝它。
$(document).ready(function() {
$('#doReport').click(function(event){
doReport('blah');
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.