javascript函数在ajax之后停止工作
javascript functions stop working after ajax
我的代码如下:
<div id="action-buttons" class="container">
<button type="button" name="MyButton" id="closeButton">close RMA</button>
</div>
<div>
<button type="button" id="refreshButtons">refresh Buttons</button>
</div>
<script type="text/javascript">
$(document).ready(function () {
$("#refreshButtons").on('click', function () {
$.ajax({
url: "/renderButtons.html",
error: function () {
alert('Error message');
},
success: function (HtmlResult) {
$("#action-buttons").html(HtmlResult);
},
complete: function() {
alert('Action buttons - loaded successfully');
}
});
});
$("#closeButton").on('click', function () {
alert('some text');
});
});
</script>
当我点击#closeButton
时,我会看到警报。这是正确的。
但是当我加载div#action-buttons
内容时(通过单击#refreshButtons
),我的警报不会显示。为什么?
为什么浏览器控制台中没有消息?。
"/renderButtons.html"只是html文件:
<button type="button" name="MyButton" id="closeButton">close RMA</button>
按钮停止触发事件处理程序,因为它们不再连接到事件处理程序。
您的
$("#action-buttons").html(HtmlResult);
行完全破坏#action-buttons
元素内的元素,并且用新元素替换它们。这些新元素并没有连接到您的事件处理程序,旧的元素是。
你可以用两种方法来解决这个问题:
再次连接
使用事件委派
活动委托可能是您想要的。您将事件挂接在一个不会更改的容器上(例如#action-buttons
),但告诉jQuery不要调用您的处理程序,除非事件通过了一个与您给它的选择器匹配的元素:
$("#action-buttons").on('click', "#closeButton", function () {
alert('some text');
});
on
文档中的更多信息。
实时示例:
$(document).ready(function() {
var counter = 0;
$("#refreshButtons").on('click', function() {
// Simulating the ajax here
setTimeout(function() {
++counter;
$("#action-buttons").html(
'<button type="button" name="MyButton" id="closeButton">close RMA #' + counter + '</button>'
);
}, 10);
});
$("#action-buttons").on('click', "#closeButton", function() {
alert('some text');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="action-buttons" class="container">
<button type="button" name="MyButton" id="closeButton">close RMA</button>
</div>
<div>
<button type="button" id="refreshButtons">refresh Buttons</button>
</div>
events
是什么,都会自动从上下文中删除。因此,在处理这种情况时,您需要使用jquery的事件委派技术来附加事件,如下所示:
$(document).on('click',"#closeButton", function () {
alert('some text');
});
在上述情况下;事件首先由document
附加和侦听,然后委派给id为"#closeButton"的按钮(如果DOM中存在)。我希望我已经消除了你的疑虑。
相关文章:
- jQuery UI自动完成突然停止工作
- JavaScript打印功能使日历停止工作
- 下拉列表在使用z索引放置在前面后停止工作
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- 注入工厂时,Angular停止工作
- React Native DeviceEventEmitter键盘WillShow停止工作
- JavaScript在更改css时停止工作
- Chrome地理定位在更新后停止工作
- 重新启动jquery脚本后,角度停止工作
- twitter引导崩溃在第一次点击后停止工作
- 更新Wordpress和我的平滑滚动停止工作
- Hammer.js过了一段时间就停止工作了
- 应用程序在“关闭”之后停止工作(控制台中没有错误);咕哝的构造”;
- Javascript在此代码之后停止工作
- 为什么我之前工作的谷歌可视化图表在2013年11月26日之后停止工作
- JQueryload()函数之后,JavaScript的其余部分停止工作
- Ajax公式运行在1行之后停止工作
- javascript函数在ajax之后停止工作
- jquery replaceWith之后脚本停止工作
- Jquery -在ajax和FormData之后单击事件停止工作