为什么不设置.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();
有效,但你的其他例子没有。