内(& # 39;mouseenter& # 39; . .不检测附加元素(jQuery)
.on('mouseenter'... not detecting appended element (jQuery)
下面的代码没有将事件绑定到附加元素(使用.insertBefore()
)。
根据我的理解,.on()
应该像.live()
一样工作。事实并非如此吗?
<div class="todoColumn">
<div class="projectHeader">
<div class="title">Example</div>Subtitle
</div>
<div class="todo">
<div class="checkbox"><span class="check pictos">3</span></div>
<div class="text">another test</div>
<div class="floatfix"></div>
</div>
<div class="todo">
<div class="checkbox"><span class="check pictos">3</span></div>
<div class="text">another test</div>
<div class="floatfix"></div>
</div>
</div>
$('.todoColumn .todo .checkbox').on('mouseenter', function() {
$(this).find('.check').css('visibility','visible');
});
这取决于你把选择器放在哪里。将它放在第一个jQuery对象中不会有任何.live()
行为。它绑定静态事件处理程序。
在jQuery对象中指定一个注释父对象,并将选择器放在.on()
的参数中,您将获得实时行为:
$(document.body).on('mouseenter', '.todoColumn .todo .checkbox', function() {
$(this).find('.check').css('visibility','visible');
});
如果您选择比document.body更接近实际对象的共同父对象,它将更有效地工作(并且比.live()
更好)。.live()
的一个问题是文档对象上有太多的事件处理程序(都有选择器要检查). .on()的工作方式更像.delegate()
,并允许您将事件处理程序放在更接近实际对象的公共父对象上。
.on()
参数中最简单的选择器:
$('.todoColumn').on('mouseenter', '.checkbox', function() {
$(this).find('.check').css('visibility','visible');
});
要按您想要的方式使用它,您需要将选择器放在函数中,并将事件绑定到文档:
$(document).on("mouseenter", ".column .todo .checkbox", function(){
// do stuff
});
并且,就像jfriend00建议的那样,将事件绑定到最近的父节点更有效:
$(".column .todo").on("mouseenter", ".checkbox", function(){
// do stuff
});
相关文章:
- 可以't附加html元素jquery
- 循环遍历元素jquery选择器
- 在ajax加载的元素jquery上包含现有的jquery函数
- 如何删除元素列表中的类并添加到另一个元素 Jquery.
- 获取单击的类元素 jQuery 的名称值
- 获取上一个元素 jQuery 的内容
- 根据另一个元素的更改获取一个元素(jquery)
- 区分不同的可拖放元素(jQuery 拖放)
- 除了最后一个<td>元素-Jquery
- 获取子元素jQuery的单选按钮值
- 捕获元素jquery外部的mousedown事件
- .append到非DOM元素jQuery
- 获取其父元素的精确子元素.Jquery
- 获取重复结构中的特定元素jquery
- 捕获隐藏输入元素jQuery的值
- 使用onclick函数获取点击的元素jquery
- 返回父元素 jquery 中的输入值
- 按属性查找元素 jQuery
- 选择元素 jQuery
- 按子元素 - jQuery 的数据 ID 对 li 进行排序