如何使用 jQuery 禁用双击或超时点击?

发布于 2025-01-07 09:41:20 字数 393 浏览 0 评论 0原文

我有一个锚点,它使用 jQuery .click 事件来启动一些功能。

jQuery(document).ready(function(){  
    jQuery('a.slide_circ').click(function(){ 
        do_all_functions();
        return false; 
    });
});

这是简短的代码.. 它按需要工作,每次点击锚类 slip_circ 都会启动 do_all_functions。

但我有一个问题。如果用户双击,他们会运行 2 次或更多次功能...... 以及这个想法如何走向地狱。

我认为我需要以某种方式禁用双击或在我的函数上设置超时,这样它就不会每次都运行。谁能帮助我吗?

I have an anchor which is using jQuery .click event to start a few functions.

jQuery(document).ready(function(){  
    jQuery('a.slide_circ').click(function(){ 
        do_all_functions();
        return false; 
    });
});

This is the code in short..
Its working as it needs to, every click on anchor class slide_circ start do_all_functions.

But I have a problem there. If user make double clicks they run 2 times or more the functions...
And the how idea go to hell.

I think that I need to disable the double click some way or to set timeout on my function so its not running each time. Can anyone help me ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清风夜微凉 2025-01-14 09:41:20

使用 .data 方法将状态分配给元素。然后,使用 setTimeout 重置状态:

jQuery(document).ready(function() {
    jQuery('a.slide_circ').click(function() { 
        var $this = jQuery(this);
        if ($this.data('activated')) return false;  // Pending, return

        $this.data('activated', true);
        setTimeout(function() {
            $this.data('activated', false)
        }, 500); // Freeze for 500ms

        do_all_functions();
        return false; 
    });
});

Use the .data method to assign the state to the element. Then, use setTimeout to reset the state:

jQuery(document).ready(function() {
    jQuery('a.slide_circ').click(function() { 
        var $this = jQuery(this);
        if ($this.data('activated')) return false;  // Pending, return

        $this.data('activated', true);
        setTimeout(function() {
            $this.data('activated', false)
        }, 500); // Freeze for 500ms

        do_all_functions();
        return false; 
    });
});
鹿童谣 2025-01-14 09:41:20

有几种方法可以做到这一点,但其中一种方法是:

jQuery(document).ready(function(){ 
    var do_all_functions_running = false; 
    jQuery('a.slide_circ').click(function(){
        if (!do_all_functions_running) { 
            do_all_functions_running = true;
            do_all_functions();
            do_all_functions_running = false;
        }
        return false;   
    });  
});

不完美,但它会起作用。

A few ways to do it, but one way is:

jQuery(document).ready(function(){ 
    var do_all_functions_running = false; 
    jQuery('a.slide_circ').click(function(){
        if (!do_all_functions_running) { 
            do_all_functions_running = true;
            do_all_functions();
            do_all_functions_running = false;
        }
        return false;   
    });  
});

Not perfect, but it'll work.

戒ㄋ 2025-01-14 09:41:20

您可以检查运行的最后日期,如果距离不到半秒则取消:

jQuery(document).ready(function() {
    jQuery('a.slide_circ').each(function() {
        var lastRun = null;

        $(this).click(function() {
            if(lastRun && new Date() - lastRun < 500) {
                // Less than 500ms; ignore.
                return false;
            }

            // Set the last run:
            lastRun = new Date().getTime();

            // Continue:
            do_all_functions();
            return false; 
        });
    });
});

它的优点是效率更高一些。

You can check the last date of the run, and cancel if it was less than half a second ago:

jQuery(document).ready(function() {
    jQuery('a.slide_circ').each(function() {
        var lastRun = null;

        $(this).click(function() {
            if(lastRun && new Date() - lastRun < 500) {
                // Less than 500ms; ignore.
                return false;
            }

            // Set the last run:
            lastRun = new Date().getTime();

            // Continue:
            do_all_functions();
            return false; 
        });
    });
});

It has the advantage of being a little more efficient.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文