在较新版本中使用.click()触发jQuery .change()事件?

Jar*_*obb 24 javascript jquery jquery-click-event

我目前正在升级我的应用程序以使用jQuery 1.6.1(以前使用1.4.4),并发现现在该.click()事件.change()也会自动触发事件.

我在这里创建了一个简单的例子:http://jsfiddle.net/wDKPN/

请注意,如果包含1.4.4,.change()则在触发事件时不会触发该函数.click().但切换到1.6时,该.change()事件发射时.click()被触发.

两个问题:

  1. 这是一个错误吗? 似乎以编程方式触发.click() 也不应该触发其他事件(例如,自动触发.blur().focus()帮助"模仿"用户的点击似乎也是错误的).

  2. 什么是我绑定的正确方法change()事件,然后触发这两个click()change()事件为元素? 我是否只是打电话.click(),并依赖于也.change()将开火的事实?

    $('#myelement').change(function() {
         // do some stuff
    });
    
    $('#myelement').click(); // both click and change will fire, yay!
    
    Run Code Online (Sandbox Code Playgroud)

在我的旧代码中,我使用此模式在ajax调用之后初始化一些复选框(及其检查的状态和值):

    $('#myelement').change(function() {
         // do some stuff including ajax work
    }).click().change();
Run Code Online (Sandbox Code Playgroud)

但是在1.6.1中,我的逻辑会激发两次(一次为.click()一次,一次为一次.change()).我可以依赖于删除.change()触发器并希望jQuery在未来版本中继续以这种方式运行吗?

She*_*hef 3

最好的方法是:

$('#myelement').bind('initCheckboxes change', function() {
     // do some stuff including ajax work
}).trigger('initCheckboxes');
Run Code Online (Sandbox Code Playgroud)

要进行初始化工作,您只需为其绑定一个自定义事件,该事件将在页面第一次加载时触发。在任何版本中,没有人会夺走这一点。

change我相信,事件将继续存在于所有版本中,因为它已经存在了很长时间,而且它以这种方式运行得很好。

最后,这是一个美好结局的故事,因为自定义事件initCheckboxes只会在页面加载时触发一次,并且change事件将始终侦听并在状态更改时触发。