Javascript setTimeout不是只运行一次

Javascript setTimeout不是只运行一次,javascript,jquery,Javascript,Jquery,我想通过点击注册模式上的“登录”链接隐藏注册弹出窗口并显示登录弹出窗口。这是工作正常,但问题是,设置超时是保持打开登录弹出窗口后,每1秒,而我想有1秒的暂停,只执行它一次。 我使用了clearTimeout,它甚至一次都不会打开登录弹出窗口。 请引导我。提前谢谢! 这是我的剧本: var Tid; jQuery(document).ready(function ($) { //trigger login link on signup popup jQuery("#registe

我想通过点击注册模式上的“登录”链接隐藏注册弹出窗口并显示登录弹出窗口。这是工作正常,但问题是,设置超时是保持打开登录弹出窗口后,每1秒,而我想有1秒的暂停,只执行它一次。 我使用了clearTimeout,它甚至一次都不会打开登录弹出窗口。 请引导我。提前谢谢! 这是我的剧本:

var Tid;
jQuery(document).ready(function ($) {

    //trigger login link on signup popup
    jQuery("#register-form #login-modal a").attr("href",
        "javascript:void(0);");

    jQuery("#register-form #login-modal").click(function () {
        jQuery("#register-modal-wrap").find(".mfp-close").trigger("click");
        openLoginModal();
    });

    function openLoginModal() {
        Tid = setTimeout("jQuery('#login-modal a').trigger('click')", 1000);
        //clearTimeout(Tid);
    }
});

正如@Thilo所指出的,代码中存在一个递归触发的click事件,这会导致openLoginModal函数一次又一次地被调用,唯一的停止方法是确保openLoginModal函数只被调用一次。这应该可以解决这个问题

var Tid;
jQuery(document).ready(function ($) {
    //trigger login link on signup popup
    jQuery("#register-form #login-modal a").attr("href",
        "javascript:void(0);");
    jQuery("#register-form #login-modal").click(function () {
        jQuery("#register-modal-wrap").find(".mfp- close").trigger("click");
        if (typeof Tid === 'undefined') {
            Tid = setTimeout(openLoginModal, 1000);
        }
    });

    function openLoginModal() {
        clearTimeout(Tid);
        jQuery('#login-modal a').trigger('click');
    }
});

在超时期间,您会递归触发另一次单击,因此它将循环。不需要函数调用OpenLoginModel。共享html或提供fiddle。您实际上还没有问过问题-请尝试使用问号。到底什么是。。。不只是跑一次,这是什么意思?