我有以下的代码片段(使用了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();
});
假设该帖子正常工作并返回一个正确的预构建
<tr>
,其中包含一些 <td>
。这里有一个奇怪的问题: $(result).find()
行可以找到正确的输入框(因为它是单元格中唯一的输入框),并且可以正确地运行链接的 click()
函数,但它拒绝将复选框设置为已选中,而我需要这样做。还有一个疯狂的转折...当我变得非常具体,并将
$(result).find()
行更改为此内容(即复选框的 id)时:$('#ad_' + id).click();
它勾选了复选框,但没有运行click()
函数!如果我设置为
$('#ad_' + id).attr('checked','checked').click();
它会像复选框被选中一样运行点击函数,但是复选框仍然未被选中,如果我执行
$('#ad_' + id).click().attr('checked','checked');
它根本没有做任何事情。
这到底是怎么回事?我快被搞疯了……
谢谢!
编辑
这是我在 $(function())
调用中设置点击事件的方法:
$('td.select-ad input').live('click',AdPreview.selectAd);
对于所有其他复选框,它们按原样工作,如果手动单击,则新添加的复选框确实有效。
编辑2
经过一些挖掘,我发现这个:
$('#ad_' + id).click();
实际上,在检查复选框的同时,确实会调用我的点击函数。 但是,当调用点击函数时(我已经检查过input
是正确的复选框),
var input = $(this);
console.log(input.is(':checked'));
日志返回false,即使实际上已经勾选了该框! GAH WTF