2012-03-22 66 views
3

我有2行jQuery。第一行是在“myLink”上添加事件,第二行在“#another”上添加类“myLink”,但事件不在第二个中,但是当我使用.live方法时,它是有用的。 jquery在1.7版本中引入.on方法。我想通过.in函数来做到这一点,这是可能的。jquery .on函数?

$(function(){ 

    $("a.myLink").on('click', function() { alert('Click!'); }); 

    $("a#another").addClass("myLink"); 
}) 



<a class="myLink">A link!</a> 
<a id="another">Another link!</a> 
+0

在你使用'on',做*事件委托一些研究报告*,然后阅读文档。一般来说,这是一项重要的技术。 – 2012-03-22 05:25:36

回答

3

我只是写了一篇关于使用.on()更换.live()底漆和解释.on()(您正在使用)两种静态形式和.on()的动态表单(你需要使用)。来自今天早些时候的引物在这里:Does jQuery.on() work for elements that are added after the event handler is created?其中包含更多的细节。

您需要使用这样的事情:

$(document).on('click', "a.myLink" function() { alert('Click!'); }); 

,或者甚至更好的使用你的动态链接的静态祖先,而不是document(我会假设这里是一个对象#container,因为这将提供更好的性能像这样:

$("#container").on('click', "a.myLink" function() { alert('Click!'); }); 
+0

感谢通报 – Carlos 2012-03-22 05:32:23

1

尝试

$(document).on('click', 'a.mylink', function() { alert('Click!'); });

+2

在文档树顶部附近附加许多委托事件处理程序可能会降低性能。为获得最佳性能,请在尽可能靠近目标元素的文档位置附加委派事件。 (http://api.jquery.com/on/) – Alex 2012-03-22 05:22:32

0

你的线索是,它与现场方法一起工作。它的工作原理是因为你在设置事件之后将类添加到“#another”中。因此,您必须使用实时方法或切换顺序,以便首先将类添加到“另一个”。

1

改变这一点 -

$("a.myLink").on('click', function() { alert('Click!'); }); 

本 -

$(document).on('click', 'a.myLink', function(){ alert('Click!'); });