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

发布于 2024-08-27 02:01:17 字数 687 浏览 10 评论 0原文

我正在尝试获取单击的链接的 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>

I am trying to get the html value of a linked clicked.
The links are created dynamically with Ajax so I don't think .bind will
work and I don't have latest version with .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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

悸初 2024-09-03 02:01:17

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

如果您使用 jQuery v1.7+,您可以使用 .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+

Here's an alternate approach that has not been mentioned:

If you're using jQuery v1.7+ you can use the .on() method to bind an event listener to current HTML as well as HTML that is added in the future:

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

If you are using an older version of jQuery, it is recommended you use the .delegate() method instead:

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

In summary:

$(elements).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(elements).on(events, selector, data, handler);        // jQuery 1.7+
伴随着你 2024-09-03 02:01:17

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

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

Apply your handler to just the links, in the callback of the AJAX load.

$('div#message').load( myUrl, function() {
    $('div#message a').click(function() {
       var valueSelected = $(this).html();
       alert(valueSelected);
       return false;
    });
});
夏雨凉 2024-09-03 02:01:17

您有 2 个选择 -

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

You have 2 options -

  1. Use the LiveQuery plugin which is what we used before .live came along
  2. Rebind your function to the click event after each successful ajax call. (Recommended)
_蜘蛛 2024-09-03 02:01:17

如果可以的话,您确实应该使用最新版本。

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

You should really be using the latest version if you can help it.

If it's the ".doYouMean" elements that are added using AJAX, and #message is always there, try:

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

(This works: http://www.jsfiddle.net/SuVzv/)

绝情姑娘 2024-09-03 02:01:17

其他解决方案是为单击重新初始化创建一个函数,因为您可能有其他情况,就像我一样:),所以逻辑可能如下:

$(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() :)

Other solution is to make a function for click reinitialization, because you may have other situation, like i had :), so logic may be following:

$(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;
  });
  .......
}

on ajax success run initsomething() :)

忆沫 2024-09-03 02:01:17

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

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

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

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

Maybe a late and duplicate answer but This may be a late but this is what I do when I need ajax.

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

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

And you dont need to reinitiate event listeners at all or write anything in ajax function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文