脚本:
$(document).ready(function(){
$.ajax({
type : "POST",
url : "list_controller.php",
data : "a=get&list_id=my_list",
success : function(data){
$('#list_container').innerHTML = data;
}
});
});
HTML:
<div id="list_container"></div>
从服务器返回的data
包含一个带有一些可点击链接的HTML,该链接将触发另一个jQuery函数并再次重新加载#list_container
DIV:
<a href="#" value="a=edit&list_id=my_list&user=artur&id=110" id="adminlink">
<img src="images/edit_user.png" />
</a>
我希望这些链接可以调用其他AJAX函数,例如:
$(document).ready(function(){
$('#adminlink').click(function () {
var val = $(this).attr("value");
$.ajax({
type : "POST",
url : "list_controller.php",
data : val,
success : function(data){
$('#list_container').innerHTML = data;
}
});
});
return false;
});
问题是我无法访问触发点击功能的#adminlink
锚点元素。
其他一切都在完美地工作,但innerHTML动态data
的任何元素都无法再访问。
因为您正在覆盖#list_container
的内容,所以您注册处理程序的#adminlink
不再是页面上的那个。
最简单的解决方案是事件委派,它依赖于事件冒泡:
$('#list_container').on('click', '#adminlink', function() {
...
});
即,它实际上是接收click
事件的静态#list_container
元素,但jQuery随后检查在调用所需处理程序之前是否实际单击了ID为adminlink
的元素。
在使用事件委派时,请始终尝试使用"最接近"的静态祖先元素。在这种情况下,这将看起来是#list_container
。在最坏的情况下,您最终会使用document
,但在处理事件之前,必须将所有冒泡到DOM中。