点击另一个外部按钮即可调用ID 主上的remove()
。问题是如果用户单击btn1
并快速按下该外部按钮,则会在btn1
的事件处理程序之前调用删除。因此,在删除div之后加载弹出窗口。有没有一种方法可以在单击删除事件处理程序时停止加载请求?我在调用remove方法时尝试使用jqXHR.abort()
,但这不起作用,因为在发送ajax之前调用了remove。
有很多像btn1这样的按钮会发送ajax请求来加载HTML,而例如a.html
的少量HTMlL文件会加载一些脚本文件,例如a.js
,这些文件将被执行。如果脚本引用了remove()
中删除的某个变量,则会出现TypeError。
<div id="base">
<div id="main">
<!-- some more HTML elements -->
<button id="btn1"></button>
</div>
<div id ="popup">
</div>
</div>
<script>
var xhr;
$("#btn1").on("click", function(){
xhr = $.ajax(
url: "a.html",
success: function(){
//do something
}),
type: "GET"
});
$("#main").on("remove", function(){
// delete all resources,etc.
xhr.abort();
});
</script>
答案 0 :(得分:1)
尝试使用全局变量
var removed = 0;
$('externabutton').click(function(){
$("#main").remove();
removed = 1;
});
$("#btn1").on("click", function(){
xhr = $.ajax(
url: "a.html",
success: function(data){
if (removed == 0 ) {
//append the data
} else {removed ==0;}
}),
type: "GET"
});
答案 1 :(得分:0)
由于xhr
是异步的,因此我们无法保证在xhr
方法之前完成#main.remove
。也许你可以使用一个标志来控制它。
var isRemoved = false, xhr;
$("#btn1").on("click", function(){
if(isRemoved) return;
xhr = $.ajax({
url: "a.html",
success: function(){
//do something
if(isRemoved) return;
},
type: "GET"
});
});
$("#main").on("remove", function(){
isRemoved = true;
xhr && xhr.abort();
});