2011-10-22 71 views
2

我有一個函數SomeFunction(event) - 我想綁定一個'tap'事件到('#selectorid')元素,我想知道什麼是正確的語法:如何將事件傳遞到綁定事件的功能 - jQuery的手機

我應該使用:

$('#selectorid').unbind().bind('tap',SomeFunction); 

或:

$('#selectorid').unbind().bind('tap',function(event){ 
    SomeFunction(event);});}); 

或:

$('#selectorid').unbind().bind('tap',function(){ 
     SomeFunction(event);}); 

$('#selectorid').unbind().bind('tap',SomeFunction(event)); 

我得到完全混合起來這件事,很樂意爲一些澄清..

我使用lateset RC2 jQuery Mobile的

+0

請問爲什麼你在.bind之前調用.unbind()? – b01

+0

,因爲由於某種原因,我繼承了一個與我從相機獲得的圖像的綁定,並在畫布元素上重繪。不僅它不能運行我的功能,還有一個點擊畫布圖片返回到手機相機..所以我想通了,我最好排除繼承事件選項 – alonisser

回答

2

#1應該完成工作,但要求您具有全局定義的「SomeFunction」:

$("#selectorid").unbind().bind("tap", SomeFunction); 

會發生什麼事是,當事件被觸發,它會調用相同的「SomeFunction」,並通過該事件,因爲它是第一個參數,因此,所有你需要做的就是定義SomeFunction,就像這樣:

SomeFunction(p_event) 
{ 
    // Do cool evil stuff with the event parameter like cancel the tap event >:) 
    p_event.preventDefault(); 
    // That's it. :) 
} 

#2也將工作,但同樣需要在全球範圍內定義「功能」。

$("#selectorid").unbind().bind("tap", function(p_event) 
{ 
    SomeFunction(p_event); 
}); 

在#2的情況下會發生什麼,是匿名函數將調用「SomeFunction」,並沿該事件傳遞,就像在第一個例子,但有一個額外的步驟。這就是爲什麼我更喜歡第一種方法。 :)

#3和#4有錯誤,只是前兩個不好的版本。

另外,我的意思是全局定義的是,「SomeFunction」在頁面上的任何地方都可用,而不僅僅定義在對象,插件或閉包中。因爲如果它是,那麼在你的事件處理程序中調用它可能會產生未定義的錯誤。如果你想知道,我喜歡用我的字符串使用雙引號,並用'p_'預先給我的參數變量賦值,所以我可以在函數中使用相同的變量名,並且容易區分這兩者。這是我個人的命名慣例。 :)

+0

謝謝@ b01 - 一個問題 - 我應該真的叫事件。的preventDefault();?或者這只是爲了說明緣故? – alonisser