我有一个链接, myLink
,应该将加载AJAX的内容插入到我的HTML页面的 div
(attachedContainer)中 . 问题是我绑定到jQuery的 click
事件没有在插入到additionalContainer中的新加载内容上执行 . click
事件绑定在未加载我的AJAX函数的DOM元素上 .
我需要改变什么,以便事件受到约束?
My HTML:
<a class="LoadFromAjax" href="someurl">Load Ajax</a>
<div class="appendedContainer"></div>
My JavaScript:
$(".LoadFromAjax").on("click", function(event) {
event.preventDefault();
var url = $(this).attr("href"),
appendedContainer = $(".appendedContainer");
$.ajax({
url: url,
type : 'get',
complete : function( qXHR, textStatus ) {
if (textStatus === 'success') {
var data = qXHR.responseText
appendedContainer.hide();
appendedContainer.append(data);
appendedContainer.fadeIn();
}
}
});
});
$(".mylink").on("click", function(event) { alert("new link clicked!");});
The content to be loaded:
<div>some content</div>
<a class="mylink" href="otherurl">Link</a>
8 回答
对于ASP.NET试试这个:
这似乎适用于页面加载和更新面板加载
请找到完整的讨论here .
对于仍在寻找解决方案的人来说,最好的方法是将事件绑定到文档本身而不是与“准备好”事件绑定例如:
});
例如,如果您的ajax响应包含html表单输入,那么这将是很好的:
如果您的问题是“如何在ajax加载的内容上绑定事件”,您可以这样做:
所以你不需要将配置放在每个ajax代码上
对动态创建的元素使用事件委托:
这确实有用,这里是一个例子,我用类
.mylink
而不是data
附加一个锚 - http://jsfiddle.net/EFjzG/如果在调用.on()之后附加了内容,则需要在已加载内容的父元素上创建委托事件 . 这是因为在调用.on()时(即通常在页面加载时)绑定事件处理程序 . 如果在调用.on()时元素不存在,则事件不会绑定到它!
因为事件通过DOM传播,我们可以通过在页面加载时在父元素(下面的示例中为
.parent-element
)上创建委托事件来解决这个问题 . 这是如何做:关于这个主题的更多阅读:
https://learn.jquery.com/events/event-delegation/
http://jqfundamentals.com/chapter/events
从jQuery 1.7开始,不推荐使用
.live()
方法 . 使用.on()
附加事件处理程序 .示例 -
使用jQuery.live()代替 . 文档here
例如