我有以下代码片段(我正在使用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()
函数,但是它拒绝将框设置为检查,我需要发生。
这也是一个疯狂的转折......当我获得超级特定并将$('#ad_' + id).click();
行更改为此(复选框的ID)时:
click()
它会检查该框,但不会运行$('#ad_' + id).attr('checked','checked').click();
功能!如果我将其设置为
$('#ad_' + id).click().attr('checked','checked');
它会运行点击功能,就像检查了该框一样,但是框仍未选中,如果我这样做
$(function())
它什么都不做。
世界上有什么问题呢?我的头发已经用完了......
谢谢!
以下是我在$('td.select-ad input').live('click',AdPreview.selectAd);
电话中设置点击事件的方式:
$('#ad_' + id).click();
它适用于所有其他复选框,如果手动点击,新添加的复选框确实有效。
经过一番挖掘,我发现了这个:
input
除了勾选方框外,实际上 调用我的点击功能。但是,当调用click函数时(我已经检查过以确保var input = $(this);
console.log(input.is(':checked'));
是正确的复选框,而且是),
{{1}}
即使实际检查了该框,日志也会返回false! GAH WTF
答案 0 :(得分:4)
我认为这是因为你正在查找一些不在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();
这会将属性设置为选中,然后单击它,直接取消选中它。
答案 1 :(得分:2)
http://www.electrictoolbox.com/check-uncheck-checkbox-jquery/
jQuery(或浏览器的DOM?我忘了)期望“checked”属性的真值或假值,尽管在HTML-source-land中它是“checked ='checked'”。
HTH。
答案 2 :(得分:1)
我怀疑这里发生的事情是Click
实际上是取消了复选框。这是因为正如您所说,Find
方法会返回复选框。
尝试删除点击通话。
以下是一些示例代码
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
</head>
<body>
<script type="text/javascript">
function clicked() {
console.log('clicked');
}
$(document).ready(function() {
var result = '<tr><td><input type="checkbox" id="chkbx" onclick="clicked()" /></td></tr>';
$('#edit_ads_form tbody').prepend(result);
$('#edit_ads_form tbody').find("input").click();
});
</script>
<table id="edit_ads_form">
<tbody>
</tbody>
</table>
</body>
</html>
答案 3 :(得分:1)
我想通了,谢谢所有让我走上正轨的人。这就是我必须做的事情:
首先,我更新它们以在click()
上运行,而不是将我的复选框连接到change()
上。在我这样做之后,我使用以下代替另一行:
$('#ad_' + id).click().change();
现在一切正常!复选框保持选中状态,并调用正确的函数。
再次感谢大家!
答案 4 :(得分:0)
没有$(result).find('td.select-ad input').attr('checked','checked').click();
要检查它(.attr('checked','checked')
)然后点击(.click()
)取消选中它?
请原谅我,如果有什么我想念,但我很确定就是这样。这就是为什么$('#ad_' + id).click();
有效,但你的其他例子没有。