问题描述
|
我当前正在升级应用程序以使用jQuery 1.6.1(以前使用1.4.4),并发现现在Now0ѭ事件也自动触发a1ѭ事件。
我在这里创建了一个简单的示例:http://jsfiddle.net/wDKPN/
请注意,如果包含1.4.4,则触发“ 0”事件时,“ 1”功能将不会触发。但是当切换到1.6时,触发
.click()
会触发.change()
事件。
两个问题:
这是一个错误吗?似乎以编程方式触发“ 0”也不应触发其他事件(例如,自动触发“ 7”和“ 8”以帮助“模仿”用户的点击似乎是错误的)。
我绑定to9ѭ事件然后触发该元素的click()
和change()
事件的正确方法是什么?我是否简单地叫.click()
,并依靠rely1ѭ也会触发的事实?
$(\'#myelement\').change(function() {
// do some stuff
});
$(\'#myelement\').click(); // both click and change will fire,yay!
在我的旧代码中,我使用此模式在ajax调用后初始化一些复选框(及其检查的状态和值):
$(\'#myelement\').change(function() {
// do some stuff including ajax work
}).click().change();
但是在1.6.1中,我的逻辑触发了两次(一次对.click()
,一次对.change()
)。我可以依靠删除.change()
触发器,并希望jQuery在将来的版本中继续以这种方式运行吗?
解决方法
最好的方法是:
$(\'#myelement\').bind(\'initCheckboxes change\',function() {
// do some stuff including ajax work
}).trigger(\'initCheckboxes\');
要进行初始化工作,您只需将其绑定到一个自定义事件,该事件将在页面首次加载时触发它。这样,任何版本的任何人都无法摆脱。
我相信change
事件将继续存在于所有版本中,因为它已经存在了很长时间,而且这样做的效果很好。
最后,这是个快乐的结局故事,因为自定义事件initCheckboxes
在页面加载时仅触发一次,而change
事件将始终在更改状态监听并触发。
, 我会说这是jQuery 1.4.4中的错误。删除jQuery事件处理程序并使用标准ѭ23会产生与jquery 1.6.1相同的结果。
http://jsfiddle.net/jruddell/wDKPN/26/
window.count = 0;
document.getElementById(\'mycheckbox\').addEventListener(\'change\',function() {
window.count++;
jQuery(\'#output\').append(\'I fired: \' + window.count + \' times<br />\');
});
document.getElementById(\'mycheckbox\').click();
另外,我将使用ѭ25来专门调用jQuery事件处理程序。如果要事件模型确定要调用的处理程序,请使用click
,change
等。
, 忘记复选框的单击事件。更改事件处理所有事情。
$(\'#myelement\').change(function() {
// do some stuff
});
$(\'#myelement\').trigger(\'change\');
自己看看:http://jsfiddle.net/zupa/UcwdT/
(此演示设置为jQuery 1.8,但也适用于1.6。)
, 我认为您可以通过将change()放在点击处理程序中,然后触发点击,使其对jQuery 1.4.4和1.6的实现均有效。
$(\'.myelement\').click(function(){
$(\'.myelement\').change();
alert($(this).val());
});
$(\'.myelement\').trigger(\'click\');
看看那里的简单例子。