<html><head>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script>
$( window ).on( "load", function() {
myfunc();
});
$(window).resize(function() {
clearTimeout(this.id);
this.id = setTimeout(myfunc, 200);
});
function myfunc(){
$( "#myid" ).click(function() {alert('Hello');});
}
</script>
</head><body>
<img src="https://assets.servedby-buysellads.com/p/manage/asset/id/32054" id="myid">
</body></html>
使用浏览器中的最小化和展开按钮。首次调整大小后单击图像,您将看到两个警报。第二次调整大小后,您将看到三个警报,依此类推。如何结束新呼叫的上一个功能呼叫,仅查看myfunc()
上次呼叫的警报?我需要这种调整大小的方式,因为我需要在调整大小后立即更改其他元素。
答案 0 :(得分:0)
每次调整窗口大小时,都会调用myfunc
函数,该函数会注册相同的回调匿名函数,该函数会一遍又一遍地显示警报。
相反,给出显示alert
名称的函数,注册单击函数,调用一个单独命名的函数,只显示一次alert
并根据需要调用它:
function showAlert(){
alert('Hello');
}
$(window).on("load", function(){
// Separate the code that actually produces the alert
// so it can be called as needed.
$("#myid").on("click", showAlert);
showAlert();
});
$(window).resize(timer);
function timer() {
clearTimeout(this.id);
this.id = setTimeout(showAlert, 200);
}
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<img src="https://assets.servedby-buysellads.com/p/manage/asset/id/32054" id="myid">
答案 1 :(得分:0)
问题是resize函数会多次触发,你可以通过调整大小函数中的console.log("Handler for .resize() called.");
找到你自己,这样你就会明白发生了什么,以及它为什么会发生。
可以解决此问题的简单修复方法是使用setInterval()
函数。
jQuery(document).ready(function($){
$(window).on( "load", function() {
myfunc();
});
$(window).resize(function() {
var loop = setInterval(myfunc, 30);
clearInterval(loop);
});
function myfunc(){
$("#myid").click(function(){
alert('Hello');
});
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img src="https://assets.servedby-buysellads.com/p/manage/asset/id/32054" id="myid">
&#13;
答案 2 :(得分:-2)
我认为不可能。
Javascript通常不能异步工作。虽然它可以要求浏览器发送数据并传递回调函数,但任何回调都只能在其他所有事情都完成后才会被激活,例如事件。 我想要结束你需要的函数执行 从函数返回。
当它上面有新功能时,无法从堆栈中弹出一个函数。