延迟点击事件

我想知道是否有一种简单的方法来延迟点击事件在指定的时间段内被处理。 例如,我们可以拥有

$('#someElement').on('click', 'a', function(event) {
    var duration = 1000;
    someAsynchronousFunction(); // Start as soon as click occurs
    ... // Code to delay page transition from taking place for duration specified
});

所以在这种情况下,异步函数将保证运行一段时间。 如果它没有完成它在这个时间的工作,我不会在意,只是想继续页面转换。 我知道有可能完成某些事情

event.preventDefault();
...
setTimeout(function(){
    window.location = $(this).attr('href');
}, duration);

但是这只有当点击链接进入整页时才有效。 我希望能够处理用于Ajax调用的链接(它不会更改url)。

我注意到mixpanel库有一个函数track_links,它似乎完成了页面转换的延迟,但该函数似乎不支持我提到的对ajax链接的支持。

任何帮助将是伟大的! 谢谢。

编辑 :所以我想我的问题不完全清楚,所以我会尝试在下面提供一些更多细节。

我不在乎async函数是否完成运行! 我只想给它保证它有一定的时间来执行,之后我不在乎它是否完成,并且希望继续进行页面转换。

即我想延迟不是异步函数的开始,而是页面转换的开始。 异步功能会在点击发生后立即开始运行。

希望这个更清楚一点!


所以最终我想出了一种方法来解决我提出的问题,并且我在这里提供它,以防其他人遇到同样的问题并正在寻找解决方案。

var secondClick = false;
var duration = 1000;

$('#someElement').on('click', 'a', function(event) {
    var that = $(this);

    if(!secondClick) {
        event.stopPropagation();
        setTimeout(function(){
            secondClick = true;
            that.click();
        }, duration);

        someAsynchronousFunction();
    } else {
        secondClick = false;
    }
}

基本上,当用户单击链接时,它会在内部阻止该点击实际发挥作用,并且在执行正常行为的链接之前再次点击该链接之前,为异步功能提供一定的时间来完成它的工作。


setTimeout允许你延迟运行代码,无论你想要多少毫秒

setTimeout(function(){
    console.log('Stuff be done'); //This will be delayed for one second
}, 1000);

实际上,如果你正在处理你想在ajax调用完成时做出响应的ajax。 它可能需要多于或少于1000毫秒。 $.ajax允许您使用.done()方法执行此操作。 这是来自文档的示例:

$.ajax({
    url: "test.html",
    context: document.body
}).done(function() {
    $(this).addClass("done");
});

window.setTimeout将在指定的延迟后执行任何给定的函数。

你会这样称呼它:

$('yourElement').click(function (event) {
    setTimeout(function () { console.log('hi'); }, 1000);
});

但我不得不想知道为什么你需要这样做。 你想解决什么问题? 通常拖延的东西并不能真正解决任何问题。

链接地址: http://www.djcxy.com/p/14645.html

上一篇: Delaying click event

下一篇: Knockout disable select option caption