jQuery - 元素在换行后不触发事件

标签 jquery events binding

当我使用 jQuery 动态创建一个 div,用它来包装另一个元素(使用 jQuery.wrap() 方法)并将一些事件绑定(bind)到包装器时,它们不会被触发。为什么?

看到这个 fiddle - http://jsfiddle.net/tqzzdu21/

var $wrapper = $('<div class="random-wrapper"></div>');   

$('.random-element').wrap($wrapper);


$wrapper.click(function(){
    alert('Sh*t happens ..');
});

只有委托(delegate)方法绑定(bind)的事件监听器才会被触发,但我不明白为什么它不应该触发直接绑定(bind)到元素实例的事件。

最佳答案

因为使用.wrap()在实际包装传递的元素之前创建它的克隆。因此,包装中使用的实际元素与传递的元素不同(在这种情况下,它不是由 $wrapper 引用的)。

相反,如果您访问目标元素的父元素并绑定(bind)事件,它应该可以工作

var $wrapper = $('<div class="random-wrapper"></div>');

$wrapper.click(function(){
  alert('before wrap - wrapper click');
});

$('.random-element').wrap($wrapper);

$wrapper.click(function(){
  alert('wrapper click');
});

$('.random-element').parent().click(function(){
  alert('parent click');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="random-element">Lipsum</div>
.wrap()

The .wrap() function can take any string or object that could be passed to the $() factory function to specify a DOM structure. This structure may be nested several levels deep, but should contain only one inmost element. A copy of this structure will be wrapped around each of the elements in the set of matched elements. This method returns the original set of elements for chaining purposes.

关于jQuery - 元素在换行后不触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25887201/

相关文章:

javascript - 为什么 event.stopPropagation() 会停止委托(delegate)事件中的多个匹配元素?

MVVM 树状 View 选定项

javascript - 检查类是否包含img src,如果不包含,则隐藏它。 jQuery

javascript - net::ERR_CONNECTION_REFUSED 错误 jQuery ajax node.js

javascript - 在列表中的图像之间淡入淡出

javascript - 一个元素上有 2 个点击事件,只需要运行一个

jquery - on 事件不处理 jquery

c++ - 我可以将我的 C++ 代码绑定(bind)到 lua 并将其开发到某个 lua 游戏引擎吗?

javascript - 扩展 V8 JavaScript 引擎

javascript - JQuery向父元素添加类