奇怪的 jQuery("checkbox").click().is(":checked") 行为
谁能解释为什么当使用 $("#test").click() 单击复选框时
$(this).is(":checked")
给出相反的结果> 比手动单击或使用 document.getElementById("test").click()
??
在这里编辑请求的行为 - 谢谢:
编辑2
这个一直让我发疯,但我终于意识到——在 jQuery 1.5.2 版本中,当调用 click()
方法时,会触发 change
事件的事件处理程序(就像原生js一样)!在以前的版本中并非如此。
看这里:
http://dl.dropbox.com/u/ 6996564/jquery_click_test/test-1.4.4.htm ...测试-1.5.1.htm ... test-1.5.2.htm
有人可以帮我报告这个错误吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
点击事件发生在值更改之前,因此它获取的是旧值。单击的默认处理程序发生在单击事件之后并切换值。这就是为什么它得到相反的值。我认为文档单击功能正在做一些奇怪的事情(我不会相信它,我会相信 jQuery)。
看看这个小提琴: http://jsfiddle.net/ub8Zk/4/
The click event happens BEFORE the value changes, so it is getting the old value. The the default handler for click happens AFTER your click event and toggles the value. That is why it is getting the opposite value. I would think the document click function is doing something wierd (I would not trust it, I would trust jQuery).
Look at this fiddle: http://jsfiddle.net/ub8Zk/4/
由于您使用的是复选框输入,因此您需要
is(':checked')
而不是is(':selected')
Since you are using a checkbox input, you want
is(':checked')
notis(':selected')
我没有看到你的代码。根据文档,click() 将处理程序绑定到鼠标单击事件。你也可以写:$('#foo').bind('click', function() {
alert('用户点击了“foo”。');
});
如果要触发,请使用触发器()函数,如下所示: $('foo').trigger('click') 或 document.getElementById('foo').checked = true;当使用直接的 javascript 时。
I don't see your code. click() binds according to documentation a handler to the mouse click event. You may also write:$('#foo').bind('click', function() {
alert('User clicked on "foo."');
});
If you want to trigger use the trigger() function like so: $('foo').trigger('click') or document.getElementById('foo').checked = true; when using straight javascript.