2014-04-24 108 views
0

有時,事件處理的方式仍然讓我感到困惑。我只是想知道如何將事件傳遞給它的處理程序。將事件傳遞給事件處理程序

下面的例子只是正常工作:

$(document).on('click', "div#foo", function(event) { 
    event.preventDefault(); 
}); 

但如何將事件傳遞給name指定,像一個處理程序:

// this obviously wont work 
$('div#foo').on('click', fooClick); 
function fooClick(event){ 
    event.preventDefault(); 
} 

感謝您的見解!

回答

1

你的第二個例子是如何做到這一點,這將工作得很好。

.on()負責爲它調用的回調設置參數,通過什麼與您如何聲明回調完全無關。回調函數的第一個參數將是event對象,無論如何聲明回調。

所以,這會工作得很好:

function fooClick(event){ 
    event.preventDefault(); 
} 

// this works just fine 
$('div#foo').on('click', fooClick); 

工作演示:http://jsfiddle.net/jfriend00/BWKde/

瞭解什麼是重要的是,當你通過fooClick作爲第二個參數.on(),你只是傳遞一個函數參考。它是.on()誰決定如何調用該函數引用以及通過它。


僅供參考,如果你通過只是#foo,不div#foo除非您特別想只匹配#foo如果它是在div標記您的選擇通常會表現得更好。由於id值只能在給定頁面中使用一次,因此通常不需要進一步限定它們,這樣做只會使更多(不必要)的選擇器引擎工作。

+0

感謝您的快速回復。但它似乎不適合我。我在鏈接上使用preventDefault,如果使用第二個示例中描述的方式,它將在新窗口中打開鏈接。 – nevrx

+0

@nevrx - 你可以在jsFiddle中將它縮小到一個小的演示,因爲這個概念是正確的,所以你的實現必須有其他錯誤。 – jfriend00

+0

@nevrx - 我添加了一個工作演示,告訴你這個概念工作得很好:http://jsfiddle.net/jfriend00/BWKde/ – jfriend00

0

你的代碼是好的,在http://jsfiddle.net/9266U/

檢查和閱讀更多https://api.jquery.com/on/

$('div#foo').on('click', fooClick); 
function fooClick(e){ 
    alert("it work, nevrx"); 
    e.preventDefault(); 
} 
+0

謝謝隊友!我只能檢查一個答案是正確的,你也是。 – nevrx

0

JavaScript是同步的,儘量把它像這樣:

function fooClick(event){ 
    event.preventDefault(); 
} 
$('div#foo').on('click', fooClick); 
相關問題