javascript - 用编辑器(和返回)递归替换元素会破坏事件监听器

标签 javascript jquery

背景:我的网站上有一些值可以通过 JavaScript 和 Ajax 进行编辑。 Ajax 工作正常,我可以编辑值,但保存值后,如果不重新加载页面,我无法再次编辑它。

我将问题简化为:原始元素被 HTML 表单替换。当提交表单时,表单本身被新版本的显示元素替换,但事件监听器被破坏。

我整理了一些示例 JS 代码 ( JSfiddle ),但它无法按我的预期工作。

var text = $('<em/>').text('click me!');

text.click(function() {
    var button = $('<input type="button" value="Click me, too" />');

    button.click(function() {
        $('#container').html(text);
    });

    $('#container').html(button);
})

$('#container').html(text);

会发生什么:

  1. 显示当前值
  2. 在文本点击后将文本替换为表单(为了简单起见,保存文本元素)
  3. 按钮点击后再次显示文本
  4. 点击文本再次起作用,如步骤 2 所示(现在不起作用)

为什么再次使用text对象时click事件会丢失?

最佳答案

使其工作而不重写整个结构的一个选项是使用绑定(bind)事件克隆元素:

text.click(function() {
    ...
    button.click(function() {
        $('#container').html(text.clone(true));
    });
    ...
})

$('#container').html(text.clone(true));

演示: http://jsfiddle.net/J8Sa7/2/

关于javascript - 用编辑器(和返回)递归替换元素会破坏事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10884227/

相关文章:

javascript - 创建对象后向其添加附加函数

jquery - 表格行可以通过 jquery 的 bgcolor 或其值作为目标吗

javascript - javascript中的匹配和替换子字符串问题

javascript - React JS 中 Clicked 事件发生的元素添加 Class

javascript - 在 PHP 中获取窗帘元素 ID 的文本

javascript - .removeClass 用于多个缓存选择器

javascript - 查询 |分离(),追加()范围

jquery - 简单的ajax和jquery ajax

javascript - 使用 JS 或 JQ 覆盖引荐来源网址 Google Analytics

javascript - 将Asp.net core Page Modal对象转换为Vue、js数据对象