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()被触发.
两个问题:
这是一个错误吗? 似乎以编程方式触发.click() 也不应该触发其他事件(例如,自动触发.blur()并.focus()帮助"模仿"用户的点击似乎也是错误的).
什么是我绑定的正确方法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在未来版本中继续以这种方式运行吗?
最好的方法是:
$('#myelement').bind('initCheckboxes change', function() {
// do some stuff including ajax work
}).trigger('initCheckboxes');
Run Code Online (Sandbox Code Playgroud)
要进行初始化工作,您只需为其绑定一个自定义事件,该事件将在页面第一次加载时触发。在任何版本中,没有人会夺走这一点。
而change我相信,事件将继续存在于所有版本中,因为它已经存在了很长时间,而且它以这种方式运行得很好。
最后,这是一个美好结局的故事,因为自定义事件initCheckboxes只会在页面加载时触发一次,并且change事件将始终侦听并在状态更改时触发。
| 归档时间: |
|
| 查看次数: |
25754 次 |
| 最近记录: |