2013-01-22 31 views
2

具体来说,输入类型复选框的内存区域不会在FireFox中收到'checked'属性(或任何其他检查指示符)。jQuery点击复选框没有在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,因为它会打破我继续进行的良好封装。)

回答

4

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

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

jsFiddle Demo - 在FireFox &铬&测试IE8

.click()在许多不工作Firefox中的奇怪情况(这是事实在该浏览器中本质上是错误的/不同的)。我会假设,因为它实际上并不在DOM上,所以它不知道这个事件会在哪里。这其中的原因有很多东西像.prop()存在一个等

+0

更新了我对jQuery的回答1.4.3 –

+0

所以问题的答案是:'Firefox以这样的方式实现了复选框,jQuery在内存中的DOM不能模拟像.click()这样的东西?为什么它可以在所有其他浏览器中使用?即使最新版本的jQuery在FF中也不起作用。 – JayPrime2012

+0

而且最后一次,我知道你可以使用setAttribute,attr等东西......我在询问关于IN MEMORY DOM中的click()在FireFox中不工作的问题。 – JayPrime2012

3

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

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

+0

我在jquery 1.4.3和attr的工作。但是,这不是我正在寻找的解决方案。 FF是我的点击方法不起作用的唯一浏览器,所以如果有任何方法可以使它在内存中工作,那么这将非常棒!)如果不是,则正确的答案是“否”,而不是你有建议。 – JayPrime2012

+0

您是否尝试过使用'.trigger('click')'而不是? – bevacqua

+1

@mrjustinmooser侧注:发布您下次使用jQuery的旧版本。 –

1

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

首先,我切换选中的属性:

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

然后在那之后,我触发“只是”点击处理程序(通过使用triggerHandler它实际上并没有检查/其他浏览器上再次取消选中该复选框)

checkbox4.triggerHandler("click"); 

这是模拟一个用户“点击”复选框,并选中/取消选中它。不像你可能喜欢的那样封装(从阅读上述评论和答案),但它似乎比目前接受的答案稍微更彻底。

+0

谢谢你。 triggerHandler为我做了。你能解释为什么.click不起作用吗? – Red2678