具体来说,输入类型的内存dom复选框没有收到“已检查的”#39; FireFox中的属性(或任何其他已检查的指示符)。
可以取消注释注释行以查看测试通过,但是目前您将在Firefox中看到测试失败。
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,因为它会打破我很好的封装,我会去上。)
答案 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()
来检查您的复选框
答案 2 :(得分:1)
我知道这是一个古老的问题,但我偶然发现了一个对我的单元测试有用的答案:
首先,我切换checked属性:
checkbox4[0].checked = !checkbox4[0].checked;
然后,我触发&#34;只是&#34;点击处理程序(通过使用triggerHandler,它不会在其他浏览器上再次检查/取消选中该框)
checkbox4.triggerHandler( "click" );
这模拟用户&#34;点击&#34;复选框,并选中/取消选中它。不像你希望的那样封装你的需求(通过阅读上面的评论和答案),但它似乎比目前接受的答案稍微完成了一些工作。