触发'点击'动态数据事件

时间:2013-03-16 15:04:23

标签: jquery triggers delegates

我有一系列复选框,这些复选框是从.csv文件中读取时动态创建的。在完成一系列复选框后,添加另一个复选框,即“全选”。我们的想法是,选中“全部选中”复选框(也会在选中时动态创建)将检查其上方的所有复选框。每个复选框都设置为将其名称属性放在textarea下面。

以下是从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并选择-all来注册点击事件

 //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
 });

问题是,即使'select-all'确实检查了所有文章复选框,它实际上并没有触发该行:

    $('textarea').val($(this).attr('name') + '/n');  //adds 'name' attr and a linebrea

name属性未放在textarea中。

同样,“Select-all”正在检查所有文章复选框。这只是'触发''点击'事件。

在textarea中,理想情况下会显示:

第1条

第2条

如何实现这一目标?

感谢您的帮助。

解决:

  $('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');
      });
       }
  });

Vielen Dank。

1 个答案:

答案 0 :(得分:0)

执行这些操作的方法很多,但这里只是对代码的简单更改:

 //clicking dynamically created input.article
 $('div.checkboxes').delegate('input.article','click',addname);

function addname(){
     $('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
     addname();
 });

注意 - 我注意到你似乎错过了很多;,这是一个复制错误还是你在代码中遗漏了它们?