2011-12-23 30 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