jQuery单击复选框不会检查Firefox

时间:2013-01-22 17:01:46

标签: jquery firefox

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

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

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

var cb = $('<input type="checkbox" />')
//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,因为它会打破我很好的封装,我会去上。)

3 个答案:

答案 0 :(得分:4)

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

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

jsFiddle Demo - 在FireFox&amp; Chrome&amp; IE8

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

首先,我切换checked属性:

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

然后,我触发&#34;只是&#34;点击处理程序(通过使用triggerHandler,它不会在其他浏览器上再次检查/取消选中该框)

checkbox4.triggerHandler( "click" );

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