为什么不设置.attr(’checked’,’checked’)?

我有以下代码片段(我正在使用jQuery 1.4.2):

$.post('/Ads/GetAdStatsRow/', { 'ad_id': id }, function(result) { $('#edit_ads_form tbody').prepend(result); $(result).find('td.select-ad input').attr('checked','checked').click(); }); 

假设post正常工作并返回一个正确的预构建

和一些

。 这是奇怪的: $(result).find()行找到正确的输入(这是一个复选框,因为它是单元格中唯一的输入)并正确运行链接的click()函数,但是REFUSES设置框检查,我需要发生。

这也是一个疯狂的转折…当我得到超级特定并将$(result).find()行更改为此(复选框的id):

 $('#ad_' + id).click(); 

它会检查该框,但不会运行click()函数! 如果我把它设置为

 $('#ad_' + id).attr('checked','checked').click(); 

它运行点击function,就好像检查了盒子一样,但是盒子仍未选中,如果我这样做的话

 $('#ad_' + id).click().attr('checked','checked'); 

它什么都不做。

世界上有什么问题呢? 我的头发用完了……

谢谢!

编辑

以下是我在$(function())调用中设置click事件的方法:

 $('td.select-ad input').live('click',AdPreview.selectAd); 

它适用于所有其他复选框,如果手动点击,新添加的复选框确实有效。

编辑2

经过一番挖掘,我发现了这个:

 $('#ad_' + id).click(); 

实际上除了选中复选框之外,还会调用我的点击function。 但是,当调用click函数时(我已经检查过以确保input是正确的复选框,它是),

 var input = $(this); console.log(input.is(':checked')); 

即使实际检查了该框,日志也会返回false! GAH WTF

我认为这是因为你在一些不在DOM中的html上找到你的发现。

 $.post('/Ads/GetAdStatsRow/', { 'ad_id': id }, function(result) { // the "result" html is copied into the DOM $('#edit_ads_form tbody').prepend(result); // now you're doing a find on some HTML which isn't in the DOM. $(result).find('td.select-ad input').attr('checked','checked').click(); }); 

这就解释了为什么在某种程度上做具体的工作。 以下是个别问题:

 $('#ad_' + id).click(); 

这将单击该框(使其得到检查),但没有附加事件。

 $('#ad_' + id).attr('checked','checked').click(); 

这会将属性设置为选中,然后单击它,直接取消选中它。

http://www.electrictoolbox.com/check-uncheck-checkbox-jquery/

jQuery(或浏览器的DOM?我忘了)期望“checked”属性的真值或假值,尽管事实上在HTML-source-land中它是“checked =’checked’”。

HTH。

我怀疑这里发生的是Click实际上是取消勾选复选框。 这是因为正如你所说,返回复选框的Find方法。

尝试删除点击通话。

这是一些示例代码

       

我想通了,谢谢所有让我走上正轨的人。 这就是我必须做的事情:

首先,我更新它们以在change()上运行,而不是将我的复选框连接到click()上运行。 在我这样做之后,我使用以下代替另一行:

 $('#ad_' + id).click().change(); 

现在一切正常! 复选框保持选中状态,并调用正确的函数。

再次感谢大家!

不做$(result).find('td.select-ad input').attr('checked','checked').click(); 要检查它( .attr('checked','checked') )然后通过单击( .click() )取消选中它?

原谅我,如果有什么我想念的东西,但我很确定就是这样。 这就是为什么$('#ad_' + id).click(); 有效,但你的其他例子没有。