jQuery html() 方法在交换后取消绑定(bind)事件到内部 html 内的元素?

标签 jquery html events click

我遇到了一个有趣的问题。在我的网站上,当我将鼠标悬停在某个链接上时,我会动态交换内容。这是通过类似以下内容来完成的:

$('#box').html($('#newcontent').html());

现在在这个#newcontent部分,有一个<button> -我向其分配了如下单击事件的元素:(在 $(document).ready() -函数内)

$("button#buttonName").click(function(){
  $("div#containerName").toggleClass("hidden");
  }

hidden是一个 css-Class 执行 display:none 魔法。容器#containerName位于包含按钮的元素和包含使用 html() 更改的结构的元素的外部

此时的结构模型

<div id="somethingthatwhenhoveredoverwillswapthecontent">Hover over me!</div>

<div id="box">Change me!</div>

<div id="newcontent" class="hidden">I am renewed!
  <button id="buttonName">Show the weird box at the bottom</button>
</div>

<div id="containerName" class="hidden">
  I am content that is only shown when the button is clicked
</div>

所以发生的事情是这样的:页面已加载,内容交换脚本工作正常,但按钮不会触发其单击事件,出于测试原因,该事件甚至没有给出 alert('whatever'); 。看起来一旦 html() 交换 <div id="newcontent"> 中的内容到<div id="box">事件被解除绑定(bind)(我怀疑)。

这只是我没有掌握一个概念还是整个方法都错了?

最佳答案

在幕后,jQuery 正在创建一个新的 DOM 元素,而不是制作原始元素的“副本”。因此,它没有原始的事件处理程序。您可以随 html() 调用一起手动重新分配处理程序,也可以使用 delegate() 添加事件,如下所示:

$("#box").delegate("#buttonName", 'click', function(){
    $("#containerName").toggleClass("hidden");
});

关于jQuery html() 方法在交换后取消绑定(bind)事件到内部 html 内的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226979/

相关文章:

c# - 尝试使用 AJAX 和 JQuery 将 JSON 对象传递给 C#

javascript - 点击外部时如何关闭侧边栏?

javascript - 调整大小时淡入/淡出

javascript - 显示/隐藏 JavaScript 在 IE 中不起作用,仅在 Firefox 中起作用

jquery - 将事件附加到 JQuery 回调函数内的窗口或文档对象不起作用

c# - 有和没有 "new"的接线事件之间的区别

javascript - Node : One Global EventEmitter or every module it's own?

用于 ASP.NET TreeView 的 Jquery

javascript - 如何将变量从一个 .js 文件传递​​到另一个 .js?

javascript - 如何在 HTML 中淡入/淡出背景音乐(无 Flash)?