【问题标题】:Jquery add click event after append new row in table WITHOUT functionJquery在没有函数的表中追加新行后添加点击事件
【发布时间】:2016-04-27 21:36:34
【问题描述】:

这是我的问题,我在表中追加了一个新行。在这一行是一个按钮,它应该是可点击的并触发一个事件。我找到了很多解决方案,但每个解决方案都包含这种方式:

.on('click', 'button', function(){    
//do something    
});

在这个地方需要一个没有该函数调用的解决方案(仅激活点击可能性)。原因是,我有三个不同的 ajax 部分用于添加、编辑和删除表格行。我通过一个 contentEditable 表来控制它。所以每一行都有一个按钮来编辑和删除这一行。如果我插入新行,新行将获得这些按钮。为了让我的按钮像上面的例子一样运行,我得到了这样的结构:

// AJAX for edit row
do something

// AJAX for delete row
do something

// AJAX for add row
$('#editTable > tbody:last').append('<tr><td><button>DELETE</button></tr><td>');

$('#table').on('click', 'button', function() {
    // AJAX for delete row
    do something
});

这样我就看出问题了,我得把完整的AJAX-delete部分写两次。

理论上听起来很简单,激活删除按钮的点击事件,点击后会调用AJAX删除部分。

但在实践中,我找到了这样一个简单的解决方案。

希望你们有一个给我...

非常感谢!!!

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

为您添加的按钮提供一个全局类,例如 delete 并使用事件委托 on() 为所有按钮添加一个事件,请查看下面的示例。

JS:

$('#editTable > tbody:last').append('<tr><td><button class="delete">DELETE</button></tr><td>');

$('body').on('click', '.delete', function (event) {
    //Your code here
});

希望这会有所帮助。


$('body').on('click', '#add', function (event) {
  $('#editTable').append('<tr><td>test<td><td><button class="delete">DELETE</button></tr><td>');
});

$('body').on('click', '.delete', function (event) {
    alert("AJAX for delete row");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="add">Add row</button>
<table id="editTable">
    <thead>
      <th>TEST</th>  
      <th>Action</th>  
    </thead>
</table>

【讨论】:

  • 谢谢...问题是找不到/调用右键。我找到它但它不会触发,因为到目前为止我发现让他触发事件的唯一解决方案是 .on (function {}) 方式,但这种方式包括两次编写相同的代码
  • 为什么你必须写两次相同的代码 ??您只需创建一次事件,然后它将附加到添加的每个按钮并具有delete 类。
  • 这听起来我是正确的方式......到目前为止,我通过这种方式调用删除事件: $('button[name="deleteButton"]').click(function() { ... });我怎样才能分开写它并在这些按钮上调用它?
  • 我无法真正理解你想要什么,我会尝试在我的帖子中添加一个 sn-p 我相信这是一个基本案例......为什么你必须打电话给 //AJAX for delete row一开始?为什么不把它放在事件中呢?
  • Puh 难以解释……“一开始”是什么意思?
【解决方案2】:

如果您想为动态添加的内容添加点击事件,您应该使用以下代码:

$(document).on('click', 'yourcontent', function (event) {
    // ...
});

对于带有类的简单 td 元素:

$(document).on('click', 'td.myclass', function (event) {
    // ...
});

【讨论】:

  • 我知道这种方式,但我正在寻找一个解决方案,小心我写两次代码。
猜你喜欢
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2018-01-31
  • 2013-10-17
相关资源
最近更新 更多