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