我需要为一些动态创建的元素添加一个jquery监听器。我不能为我的生活让这个工作。 tag_options不是动态的,它的子节点是。我尝试了三种方法:
<div id = "tag_options">
<div class = "tag_option">hover me</div>
</div>
js:
// never works
$('#tag_options').delegate('.tag_option', 'hover', function(event){
alert();
});
// never works
$("#tag_options").on("hover", "[class='tag_option']", function(event) {
alert();
});
// works if not dynamically created
$('#tag_options .tag_option').hover( function(){
alert();
});
答案 0 :(得分:2)
不再有hover
个事件,delegate
正在逐步取消on
。您要使用mouseenter
和mouseleave
。我相信你是为此拍摄的:
$('#tag_options')
.on('mouseenter', '.tag_option', function(e){
/* Wax On */
})
.on('mouseleave', '.tag_option', function(e){
/* Wax Off */
});
如果您希望将其保存在一个on
中,您可以执行palaѕ建议。我只是想让它更容易理解:
$('#tag_options').on('mouseenter mouseleave', '.tag_option', function(event){
if ( event.type === 'mouseenter' ) {
/* Wax On */
} else {
/* Wax Off */
}
});
答案 1 :(得分:2)
这是因为没有.on("hover"
事件。您可以使用mouseenter
或mouseleave
之类的:
$(function () {
// Attach Event
// new way (jQuery 1.7+) - on(events, selector, handler);
$('#tag_options').on('mouseenter mouseleave', '.tag_option', function (e) {
alert(e.type);
});
// Create elements dynamically
$('#tag_options').append('<div class="tag_option">hover me</div>');
});
答案 2 :(得分:0)
第一个回答的例子:
$('#tag_options').on('mouseenter mouseleave','.tag_option', function(event){
if(event.type == 'mouseenter'){
alert('entering');
}
if(event.type == 'mouseleave'){
alert('leaving');
}
});
答案 3 :(得分:0)
其他语法可能,更易读IMO:
$('#tag_options').on({
mouseenter:function(){/**/},
mouseleave:function(){/**/}
},'.tag_option');
答案 4 :(得分:-1)
您可以收听mouseover
事件:
$('#tag_options').on("mouseover", ".tag_option", function(event) {
alert('hello world!');
});