在jQuery中动态地将监听器添加到ajax创建的内容中

我试图获取链接点击的html值。 链接是使用Ajax动态创建的,所以我不认为.bind会工作,我没有.live的最新版本

$('div#message').click(function() { var valueSelected = $(this).html(); // picks up the whole id. I juust want single href! alert(valueSelected); return false; });  

将处理程序应用于AJAX加载回调中的链接。

 $('div#message').load( myUrl, function() { $('div#message a').click(function() { var valueSelected = $(this).html(); alert(valueSelected); return false; }); }); 

这是一个未提及的替代方法:

如果您正在使用jQuery .on() + ,则可以使用.on()方法将事件侦听器绑定到当前HTML以及将来添加的HTML:

 $('#message a').on('click', function(){ alert('link clicked!'); }); 

如果您使用的是旧版本的jQuery,建议您使用.delegate()方法:

 $('#message').delegate('a', 'click', function(){ alert('link clicked!'); }); 

综上所述:

 $(elements).delegate(selector, events, data, handler); // jQuery 1.4.3+ $(elements).on(events, selector, data, handler); // jQuery 1.7+ 

你有2个选择 –

  1. 使用我们之前使用过的LiveQuery插件.live出现了
  2. 每次成功调用ajax后,将您的函数重新绑定到click事件。 (推荐的)

如果你能提供帮助,你应该真的使用最新版本。

如果它是使用AJAX添加的“.doYouMean”元素,并且#message始终存在,请尝试:

 $('#message').bind('click', function (event) { var target = event.currentTarget; if ($('.doYouMean').filter(target)) { // target is the .doYouMean that was clicked: Handle here }; }); 

(这有效: http : //www.jsfiddle.net/SuVzv/ )

其他解决方案是为click重新初始化创建一个函数,因为你可能有其他情况,比如我有:),所以逻辑可能如下:

 $(document).ready(function() { initsomething(); }); function initsomething(){ ....... $('div#message').click(function() { var valueSelected = $(this).html(); // picks up the whole id. I juust want single href! alert(valueSelected); return false; }); ....... } 

关于ajax成功运行initsomething():)

也许是一个迟到和重复的答案,但这可能是一个迟到但这是我在需要ajax时所做的。

 $(document).ready(function () { $(document.body).on('click', '.Selector_S', function () { function_F(event, this) }) } function function_F(event, d){ ...do sth here... } 

而且您根本不需要重新启动事件侦听器或在ajax函数中编写任何内容。