javascript - jQuery 单击事件不会在 'loaded' html 上触发

标签 javascript jquery html css

我试图理解为什么将 HTML 加载到 div block 中会使其类语句在点击事件中实际上不存在。

我的 HTML 代码如下所示:

<div id="load-to"></div> 

<div id="load-from">
    <div class="load-from-css"> Hello!</div> 
</div>

<button>load it!</button>

我的 JS 代码如下所示:

$('button').click(function(){
    var html = $('#load-from').html();
    $('#load-to').html(html);
});

$('.load-from-css').click(function(){
    alert('clicked');
});

当我单击按钮时,下方 div block 中的 HTML 被加载到上方的 div block 中,然后 HTML 看起来像这个:

<div id="load-to">
    <div class="load-from-css"> Hello!</div>
</div> 

<div id="load-from">
    <div class="load-from-css"> Hello!</div>
</div>

我的问题是,为什么第二个点击事件(在我的 jQuery 代码中定义)只对原来较低的“Hello!”有效? div block 但不在加载的上层,当两者具有相同的类定义时?

最佳答案

其他答案已经涵盖了您问题的核心原因(复制元素的 HTML 并将其放置在其他地方将创建一个全新的 DOM 元素,并且不会复制任何绑定(bind)到原始元素的事件......保持请记住,当您添加事件监听器时,它只会绑定(bind)到您这样做时存在的任何元素)

但是,我想添加一些其他选项来完成您想要做的事情。

jQuery 有一些不同的技术可以使这类事情变得简单:

.clone()基本上会做与您现在正在做的相同的事情*,它将复制 HTML 内容并创建一个新的 DOM 元素。但是,如果您传递 true(即:.clone(true)),它将完整地克隆所有数据和事件。

* 请注意,要真正获得与使用 .html() 相同的结果,您需要执行 .children().clone(),否则你将同时获得内部和外部 div.. 这可能需要也可能不需要,具体取决于用例

例如:https://jsfiddle.net/Lx0973gc/1/

此外,如果您处于同样的情况但不想进行克隆,而只是想将元素从一个地方移动到另一个地方,还有另一种方法叫做 .detach()这将从 DOM 中删除该元素,但保留所有数据和事件,允许您稍后以相同状态重新插入它。

例如:https://jsfiddle.net/Lx0973gc/2/ (不是最好的例子,因为你不会看到它移动到任何地方,但它正在移动!)

作为另一种选择,您可以使用委托(delegate)事件绑定(bind),它实际上将事件绑定(bind)到您知道不会更改的不同元素(父元素),但仍然允许您将其定位到子元素:

$('body').on({
    'click': function() {
    alert('clicked');
  }
}, '.load-from-css');

例如:https://jsfiddle.net/Lx0973gc/4/

关于javascript - jQuery 单击事件不会在 'loaded' html 上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45123881/

相关文章:

javascript - 在 div 中输出 CSS 样式规则(在屏幕上)

带有回调 Swift 的 JavaScriptCore 调用函数

javascript - 自调用函数 jQuery

javascript - 如何初始化 JavaScript 函数

javascript - 使用 jquery 递增

html - HTML5 本地存储对信用卡信息的安全影响是什么

javascript - 如何判断 Google Street View Image API 是否返回 "Sorry, we have no imagery here"(is.NULL)结果?

php - 为什么使用 F5 刷新我的网络应用程序非常慢并且挂起,而在地址栏上按 Enter 键会立即刷新页面?

javascript - WebKit 请求未创建文件

javascript - 如何成为@media 的第一名?