奇怪的 jQuery("checkbox").click().is(":checked") 行为

发布于 2024-11-01 02:08:30 字数 673 浏览 3 评论 0 原文

谁能解释为什么当使用 $("#test").click() 单击复选框时 $(this).is(":checked") 给出相反的结果> 比手动单击或使用 document.getElementById("test").click() ??

在这里编辑请求的行为 - 谢谢:

http://jsfiddle.net/ub8Zk/4/

编辑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

有人可以帮我报告这个错误吗?

Can anyone explain why $(this).is(":checked") gives the opposite result when the checkbox is clicked with $("#test").click() than when clicked manually or with document.getElementById("test").click() ??

EDIT Requested behavior here - thanks:

http://jsfiddle.net/ub8Zk/4/

EDIT 2

This has been driving me nuts, but I finally realize -- in version 1.5.2 of jQuery the event handler for the change event is fired when click() method is called (like native js)!! Not so in previous versions.

Look here:

http://dl.dropbox.com/u/6996564/jquery_click_test/test-1.4.4.htm
... test-1.5.1.htm
... test-1.5.2.htm

Can someone help me report this bug??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

流星番茄 2024-11-08 02:08:30

点击事件发生在值更改之前,因此它获取的是旧值。单击的默认处理程序发生在单击事件之后并切换值。这就是为什么它得到相反的值。我认为文档单击功能正在做一些奇怪的事情(我不会相信它,我会相信 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/

半窗疏影 2024-11-08 02:08:30

由于您使用的是复选框输入,因此您需要 is(':checked') 而不是 is(':selected')

Since you are using a checkbox input, you want is(':checked') not is(':selected')

梦里南柯 2024-11-08 02:08:30
$('input#someCheckbox').click(function() {
    if ($(this).is(':checked')) {
        // checked
    } else {
       // not checked
    };
});
$('input#someCheckbox').click(function() {
    if ($(this).is(':checked')) {
        // checked
    } else {
       // not checked
    };
});
凉栀 2024-11-08 02:08:30

我没有看到你的代码。根据文档,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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文