jQuery—防止异步函数同时运行多次

jQuery—防止异步函数同时运行多次,jquery,asynchronous,Jquery,Asynchronous,我有一个异步函数,由“onmouseover”触发,它向列表发送子节点请求并显示它们。将其设置为同步可防止出现这种情况,但据我所知,它需要异步才能在Chrome和IE中显示加载图标。问题是,如果在函数仍在执行时多次鼠标悬停,则会多次加载子对象。我遇到的问题是防止函数一次运行多次,以防止子节点被多次加载 提前谢谢 我的ajax调用(jQuery而不是$,因为我在noconflict模式下运行): 它不会“同时”运行;一个更好的词应该是“同时”。无论如何,只要设置一个标志: if (ifUlExis

我有一个异步函数,由“onmouseover”触发,它向列表发送子节点请求并显示它们。将其设置为同步可防止出现这种情况,但据我所知,它需要异步才能在Chrome和IE中显示加载图标。问题是,如果在函数仍在执行时多次鼠标悬停,则会多次加载子对象。我遇到的问题是防止函数一次运行多次,以防止子节点被多次加载

提前谢谢

我的ajax调用(jQuery而不是$,因为我在noconflict模式下运行):

它不会“同时”运行;一个更好的词应该是“同时”。无论如何,只要设置一个标志:

if (ifUlExists.length === 0 && !$('body').data('loadingUl')) {
  $('body').data('loadingUl', true);
  // the rest of your code
}
使用“body”元素数据只是无数方法之一,但我有点喜欢它,因为jQuery使
$('body')
变得非常便宜。当然,您可以将旗帜放在任何地方。

旗帜是一种选择:

var running = false;

$(selector).mouseover(function() {
    if(!running) {
         running = true;
         callAsyncFunction();
    }
});
在Ajax请求的回调中,再次设置
running=false


如果您想对多个元素执行此操作,可以将该元素的功能用作。

非常感谢!!!绝对是我花了好几个小时想弄明白的。
var running = false;

$(selector).mouseover(function() {
    if(!running) {
         running = true;
         callAsyncFunction();
    }
});