动态添加侦听器到 ajax 在 jQuery 中创建的内容
我正在尝试获取单击的链接的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这是尚未提及的替代方法:
如果您使用 jQuery v1.7+,您可以使用
.on()
方法将事件侦听器绑定到当前 HTML 以及将来添加的 HTML:如果您使用的是旧版本的 jQuery,建议您使用
.delegate()
方法: :
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:If you are using an older version of jQuery, it is recommended you use the
.delegate()
method instead:In summary:
在 AJAX 加载的回调中将处理程序仅应用于链接。
Apply your handler to just the links, in the callback of the AJAX load.
您有 2 个选择 -
You have 2 options -
如果可以的话,您确实应该使用最新版本。
如果是使用 AJAX 添加的“.doYouMean”元素,并且 #message 始终存在,请尝试:(
这有效: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:
(This works: http://www.jsfiddle.net/SuVzv/)
其他解决方案是为单击重新初始化创建一个函数,因为您可能有其他情况,就像我一样:),所以逻辑可能如下:
在 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:
on ajax success run initsomething() :)
也许是一个迟到且重复的答案,但这可能是迟到了,但这就是我需要 ajax 时所做的。
而且您根本不需要重新启动事件侦听器或在 ajax 函数中编写任何内容。
Maybe a late and duplicate answer but This may be a late but this is what I do when I need ajax.
And you dont need to reinitiate event listeners at all or write anything in ajax function.