2011-12-23 38 views
1

爲jQuery的委託方法簽名記錄爲這樣:jQuery的委託參數順序

.delegate(selector, eventType, handler) 

是否存在將使參數順序以下任何情況下,交換EVENTTYPE和選擇?

.delegate(eventType, selector, handler) 

我有一個項目,無論我做什麼,我得先放EVENTTYPE。例如,這是在我的當前項目工作的唯一的事(這只是一個試驗,沒有真正的代碼!):

$('body').delegate('click', 'input', function (e) { 
      alert("Why is this the only way it will work for me in this project?"); 
     }); 

根據文檔,這應該工作:

$('body').delegate('input', 'click', function (e) { 
      alert("This will never get hit"); 
     }); 

我測試與小項目,它的工作就像文檔說它應該(這裏是一個例子js小提琴:http://jsfiddle.net/wmdYr/16/

我使用jQuery 1.7.1從谷歌CDN,並嘗試了幾個舊版本的結果相同。

在某些情況下,Event是否需要成爲第一個參數?

回答

1

我解決了問題,現在可以使用的參數記錄以便jQuery的委託方法:.delegate(selector, eventType, handler(eventObject))

我們的解決方案是升級jQuery驗證庫到最新版本(1.9)。我正在使用的項目使用了Asp.Net MVC附帶的jQuery驗證庫(1.5.5)的舊版本。該版本似乎與jQuery的委託方法有衝突。

此衝突影響jQuery的委託方法和Backbone.js視圖事件,因爲Backbone.js使用jQuery的委託方法。

0

是的,如果你從delegate()升級到on()

Here是您的代碼。第二個示例現在使用on()

+0

檢出提供的jsfiddle,它使用'.delegate',但'target'和'event'參數是'.on'格式:http://jsfiddle.net/wmdYr/16/ – Jasper 2011-12-23 22:13:32

+0

謝謝!我沒有切換到on(),這似乎在jsfiddle和我有一個小樣本項目中工作得很好。我把那個我遇到問題的大型項目分解成最小的部分,無論我做什麼,我都必須首先將事件放在第一位才能使其工作。我會考慮這樣做,除了我還使用backbone.js,它在做事件時使用記錄的順序。我的測試不在骨幹BTW之外。這真是奇怪,而且可能不可能在SO上進行調試,除非有一個已知的參數需要以不同順序的情況! – 2011-12-23 22:54:52