2013-02-11 37 views
0

我有这个问题:
我插入某些html通过jquery。并在插入的HTML我有一个类,我已经绑定了一个函数。这个函数不是被调用的,我有这种感觉,插入的html还没有被js看到。jQuery插入后 - 元素未见

我插入代码。

$(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已经存在的元素进行测试,它正在与这一点。感谢您的帮助和指导

回答

3

您必须在添加的元素上再次运行click绑定。 也许这样的事情会工作:

$('<tr><td><a class="ame">delete</a></td></td></tr>').insertAfter('#append_tr').find('.ame').on('click', function(){ 
    alert('test'); 
}); 
+0

我仍然要保持其他绑定功能在那里? – doniyor 2013-02-11 08:23:13

1

尝试与事件委托:http://jsfiddle.net/xehu9/

$('#einf').on('click', '.ame', function(e){ //<-----pass it here. 
    e.stopPropagation(); //<---------stop the event bubbling here. 
    alert('test'); 
}); 

这是因为你试图实现一个ELEM点击这是不存在的DOM时页面准备好了。

从文档:

的事件处理程序仅结合到当前选择的元素;它们必须在代码调用.on()时存在于页面上。

+0

我不想让.ame和#inf具有不同的功能。 – doniyor 2013-02-11 08:21:49

+0

结帐小提琴尝试删除'e.stopPropagation()'你必须在事件中有一个函数。 – Jai 2013-02-11 08:31:28

+0

很酷,谢谢你 – doniyor 2013-02-11 08:35:49

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'); 
}); 
}); 
}); 
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'); 
    }); 
    }); 
+0

你在小提琴中没有任何东西 – doniyor 2013-02-11 08:36:37

+1

'.live()'从'jquery 1.9'中移除,所以要小心。 – Jai 2013-02-11 08:40:49