我有一系列从 .csv 文件中读取时动态创建的复选框。在制作了一系列复选框后,添加了另一个复选框,即“全选”。这个想法是“全选”复选框,它也是动态创建的,当被选中时,将选中它上面的所有复选框。每个复选框都设置为将其名称属性放在下面的文本区域中。
这是从 csv 文件中提取HTML后的示例。
<div class="checkboxes">
<input type="checkbox" class="article" name="Article 1" />Article 1 <br>
<input type="checkbox" class="article" name="Article 2" />Article 2 <br>
<input type="checkbox" class="select-all" name="select-all" />Select all
</div>
<textarea></textarea>
现在我在文章复选框上使用 .delegate 并全选来注册点击事件
//clicking dynamically created input.article
$('div.checkboxes').delegate('input.article','click',function(){
$('textarea').val($(this).attr('name') + '/n'); //adds 'name' attr and a linebreak
});
//clicking dynamically created select-all
$('div.checkboxes').delegate('input.select-all','click',function(){
$('div.checkboxes').find('input.article').prop('checked',true); //works to select all articles
});
问题是,即使“全选”确实检查了所有文章复选框,它实际上并没有触发该行:
$('textarea').val($(this).attr('name') + '/n'); //adds 'name' attr and a linebrea
name 属性未放置在 textarea 中。
同样,所有文章复选框都被“全选”选中。它只是“触发”一个“点击”事件。
在 textarea 中,理想情况下会显示:
第1条
第二条
如何实现?
谢谢您的帮助。
解决:
$('div.checkboxes').delegate('input.select-all','click',function(){
if ($(this).is(':checked')){
$('input.article[type=checkbox]').prop('checked',true);
$('input.article[type=checkbox]').each( function(){
$(this).trigger('click');
});
}
});
维伦丹克。