jQuery单击复选框不会检查Firefox

具体来说,输入类型的内存dom复选框不会在FireFox中收到“已检查”属性(或任何其他已检查的指示符)。

可以取消注释注释行以查看测试通过,但是目前您将在Firefox中看到测试失败。

http://jsfiddle.net/mE3xb/2/

var cb = $('') //var cb = $('input'); if (cb.is(':checked')) alert("checkbox says it's already checked"); cb.click(); if (cb.is(':checked')) alert("checkbox clicked correctly!"); else alert("fail!"); 

我在做非标准的事吗? 任何建议? 我基本上依赖于jQuery .click来实际检查UI中的复选框(我不想使用.attr,.prop,.val,因为它会破坏我正在进行的很好的封装。)

由于您使用的是jQuery 1.4.3,看起来您最好的选择是:

 cb[0].setAttribute('checked', 'checked'); // plain old vanilla JS 

jsFiddle Demo – 在FireFox和Chrome&IE8中测试过

.click()在Firefox中的许多奇怪情况下都不起作用(在浏览器中它本身就是错误的/不同的)。 我会假设因为它实际上还没有在DOM上可用,所以它不知道这个事件会在哪里。 这是.prop()等存在的原因之一,等等。

使用cb.prop('checked', true)而不是cb.click()来检查您的复选框

小提琴更新http://jsfiddle.net/mE3xb/7/

我知道这是一个古老的问题,但我偶然发现了一个对我的unit testing有用的答案:

首先,我切换checked属性:

 checkbox4[0].checked = !checkbox4[0].checked; 

然后,我触发“只”点击处理程序(通过使用triggerHandler,它实际上不会在其他浏览器上再次选中/取消选中该框)

 checkbox4.triggerHandler( "click" ); 

这模拟用户“单击”复选框,并选中/取消选中它。 不像你希望的那样封装你的需求(通过阅读上面的评论和答案),但它似乎比目前接受的答案稍微完成了一些工作。