【发布时间】:2011-02-05 12:19:23
【问题描述】:
我有以下 sn-p 代码(我使用的是 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>s。奇怪的是:$(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();
实际上确实除了选中该框外还调用了我的点击功能。但是,当调用 click 函数时(我已经检查以确保 input 是正确的复选框并且它是正确的),
var input = $(this);
console.log(input.is(':checked'));
日志返回 false,即使该框已被实际选中!呸呸呸
【问题讨论】:
-
您能告诉我们您如何定义您的点击处理程序以及它的作用吗?你如何测试“正在运行的点击功能”——你说的是点击事件的触发,对吧?