javascript - 重新创建元素后丢失点击事件

标签 javascript jquery html

我正在删除表 tbody 集并插入新的,但我正在丢失 chekcbox 上的 click 事件。我该如何解决这个问题?

我经历了 append()、clone() 但未能应用到我的代码中,因此我创建了一个 JSFIDDLE什么都有。

请告诉我我需要做什么。

提前致谢。

JSFIDDLE - CODE IS HERE

JQUERY:

$(window).load(function(){
    $('.add-selected').on("click",function() {
       alert('hello');
    });

    $('#removeAndAdd').click(function(event) {
        event.preventDefault();

        var output = '';
        output += '<tbody class="filter-rows">';
        output += '<tr class="filter">';
        output += '<td><input type="checkbox" id="c-1" class="add-selected" /></td>';
        output += '<td>1</td>';
        output += '</tr>';
        output += '</tbody>';

        output += '<tbody class="filter-rows">';
        output += '<tr class="filter">';
        output += '<td><input type="checkbox" id="c-2" class="add-selected" /></td>';
        output += '<td>2</td>';
        output += '</tr>';
        output += '</tbody>';

        $('.filter-rows').empty();
        $('#add-new-table tbody:last').after(output);
    });
});

HTML:

      <table id="add-new-table" border="1px">
        <thead>
            <th>ID</th>
            <th>SKU</th>
        </thead>

        <tbody>
            <tr>
                <td>Lbel</td>
                <td>011</td>
            </tr>
        </tbody>

        <tbody class="filter-rows">
            <tr class="filter">
                <td><input type="checkbox" id="c-1" class="add-selected" /></td>
                <td>1</td>
            </tr>
        </tbody>

        <tbody class="filter-rows">
            <tr class="filter">
                <td><input type="checkbox" id="c-2" class="add-selected" /></td>
                <td>2</td>
            </tr>
        </tbody>

        <tbody class="filter-rows">
            <tr class="filter">
                <td><input type="checkbox" id="c-3" class="add-selected" /></td>
                <td>3</td>
            </tr>
        </tbody>

    </table>

<br />
<span id='removeAndAdd'>Click me to Remove all first and Add new rows</span>

最佳答案

这里有一些不好的做法。首先是固定版本:

http://jsfiddle.net/678CP/5/

$('#add-new-table').on('change', 'input', function() {
   alert('hello');
});

$('#removeAndAdd').click(function(event) {
    event.preventDefault();

    var rows = $('#add-new-table .filter-rows');

    rows.first().add(rows.last()).remove();
});
  1. 我假设您需要创建一个新的 tbody对于每一行 - 否则将其删除。
  2. 为什么要重新创建整个表?我假设您不需要,如果您需要,代码需要进行一些更改。
  3. 为什么要等待 domLoad?我已将其更改为 onDomReady( fiddle 设置)
  4. 可点击的元素应该是 anchor <a>有一个 href
  5. 我知道这只是一个演示,但我希望您不要在 html 和 javascript 中混用双引号和单引号,并且不要在所有地方都使用 ID

工作原理:

通过使用 jQuery 的 on 的第二个参数我们创建了一个 event delegate .这意味着事件放在表本身上 #add-new-table它正在监听表内任何输入的变化。所以这是一个单一的事件,它不关心里面的东西是否被更新/删除等。它也更有效率。

还有一个关于var rows = $('#add-new-table .filter-rows'); rows.first().add(rows.last()).remove();的小解释:

“获取所有筛选行并存储它。然后选择第一行并将最后一行添加到该选择,最后删除它们”

关于javascript - 重新创建元素后丢失点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24657069/

相关文章:

javascript - redux 文档对于 mapStateToProps 意味着什么?

json - 从 JQuery.ajax 成功数据中解析 JSON

jquery - 使用 jQuery UI 选项卡时卡住了

javascript - 为什么 Flexigird 不能在 IE 上运行

javascript - 多个对话框列表

javascript - AngularJS:将数据绑定(bind)到动态创建的 HTML

javascript - 在 Ruby 中获取数组的第 n 个元素?

javascript - 使用 javascript 更改 AngularJS 输入文本值

jquery - 如何用jquery将div包裹在两个元素周围

javascript - 在流中传递 ID3 信息并在前端进行解析