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

时间:2010-03-31 12:14:36

标签: jquery ajax bind listener

我正在尝试获取链接点击的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;
});



<div id="message">
<br/>
<a class="doYouMean" href="#">location A</a>
<br/>
<a class="doYouMean" href="#">location B</a>
<br/>
<a class="doYouMean" href="#">location C</a>
<br/>
<a class="doYouMean" href="#">location D</a>
<br/>
<a class="doYouMean" href="#">location E</a>
<br/>
</div>

6 个答案:

答案 0 :(得分:16)

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

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

$('#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+

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

您有2个选项 -

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

答案 3 :(得分:0)

如果可以提供帮助,您应该使用最新版本。

如果是使用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/

答案 4 :(得分:0)

其他解决方案是为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():)

答案 5 :(得分:0)

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

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

function function_F(event, d){
...do sth here...
}

你根本不需要重新启动事件监听器或在ajax函数中写任何东西。