我有这个问题:
我通过jquery插入某些html。并且在插入的html中我有一个类,我已经绑定了一个函数。这个函数没有被称为,我有这种感觉,插入的html还没有被js看到。
我的插入代码。
$(function(){
$('#einf').on('click', function(){
$('<tr><td><a class="ame">delete</a></td></td></tr>').insertAfter('#append_tr');
});
});
你可以假设,插入效果很好。这是我的绑定功能:
$(function(){
$('.ame').on('click', function(){
alert('test');
});
});
我测试了已经存在的具有相同类ame
的元素,它正在使用它。感谢您的帮助和指导
答案 0 :(得分:3)
您必须在添加的元素上再次运行click bind。 也许这样的事情会起作用:
$('<tr><td><a class="ame">delete</a></td></td></tr>').insertAfter('#append_tr').find('.ame').on('click', function(){
alert('test');
});
答案 1 :(得分:1)
尝试使用事件委派:http://jsfiddle.net/xehu9/
$('#einf').on('click', '.ame', function(e){ //<-----pass it here.
e.stopPropagation(); //<---------stop the event bubbling here.
alert('test');
});
这是因为您尝试在页面准备好时在dom中实现单击时不存在。
来自文档:
事件处理程序仅绑定到当前选定的元素;它们必须存在于您的代码调用.on()时的页面上。
答案 2 :(得分:1)
尝试.live()
而不是.on()
http://jsfiddle.net/ThobiasN/Pt3db/
$(function(){
$('#einf').on('click', function(){ alert ('some');
$('<tr><td><a class="ame">delete</a></td></td></tr>').insertAfter('#append_tr');
});
$('.ame').live('click', function(){
alert('test');
});
});
答案 3 :(得分:0)
你不能引用一个dinamically创建的元素,因为当javascript运行时它不在DOM中,我建议你使用TEMPLATES而不是dinamic html内容。
但是,如果你想遵循这种方法,jquery允许使用concadinating元素方法:
$(function(){
$('#einf').on('click', function(){
$('<tr><td><a class="ame">delete</a></td></td></tr>')
.insertAfter('#append_tr')
.on('click',function(){
alert('test');
});
});
});