【发布时间】:2014-09-16 08:00:00
【问题描述】:
我刚刚在 jQuery 中遇到了一个问题。我没有找到已经发布的解决方案,如果有,我为我的错误道歉。
我有这个 DOM:
<div class='usersList list'>
<div id='7' class='sidebarElement'> <span>user</span></div>
<div id='21' class='sidebarElement'><span>user</span></div>
<div id='12' class='sidebarElement'><span>user</span></div>
<div id='15' class='sidebarElement'><span>user</span></div>
<div id='17' class='sidebarElement'><span>user</span></div>
<div id='13' class='sidebarElement'><span>user</span></div>
<div id='5' class='sidebarElement'> <span>user</span></div>
<div id='3' class='sidebarElement'> <span>user</span></div>
<div id='4' class='sidebarElement'> <span>user</span></div>
<div id='19' class='sidebarElement'><span>user</span></div>
<div id='2' class='sidebarElement'> <span>user</span></div>
<div id='6' class='sidebarElement'> <span>user</span></div>
<div id='18' class='sidebarElement'><span>user</span></div>
<div id='16' class='sidebarElement'><span>user</span></div>
<div id='14' class='sidebarElement'><span>user</span></div>
</div>
它是通过 AJAX 从另一个文件加载的。我遇到的问题如下。这是我的 JS:
$(document).ready(function () {
function reloadUsers(query) {
$.ajax({
url: 'getLoginUsersAjax.php',
type: 'GET',
data: {query: query},
success: function (data) {
$('.usersCardAjaxContainer').empty().html(data);
}
});
}
$(".sidebarElement span").click(function() {
console.log($(this).parent().attr("id"));
})
reloadUsers("");
});
这不起作用,我认为是因为元素是通过 AJAX 加载的,并且在解析 click 时还不在这里,我不知道 jQuery 在内部是如何工作的。我的解决方法是将点击甚至放到 ajax 的 success 分支中,如下所示:
success: function (data) {
$('.usersCardAjaxContainer').empty().html(data);
$(".sidebarElement span").click(function() {
console.log($(this).parent().attr("id"));
})
}
它有效,但对我来说似乎是错误的。我已经寻找可以做到这一点的其他函数或方法,但我只找到了自 jQuery 1.7 以来已弃用的 live。还有什么我可以使用的或者我必须坚持这个解决方法吗?
【问题讨论】:
-
使用事件委托参见这里api.jquery.com/on
-
您为什么没有在 Google(或其他任何地方)中搜索“动态元素上的 jquery 事件”之类的内容?
-
@Regent 我确实做到了,所有的解决方案都对我不起作用,但是嘿,与其抱怨我没有使用谷歌,你可以发布一个解决方案。 ;)
标签: jquery