在.load()之后3秒调用一些jquery

tma*_*314 4 jquery

我有这个jquery在模式中加载成功消息:

$('#menu_access').load(
    site_url + sUrl,
    function() {
        $(this).dolPopup(oPopupOptions);
    }
);
Run Code Online (Sandbox Code Playgroud)

我想在加载后三秒调用此函数:

$('#menu_access').dolPopupHide({});
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做.我不太熟悉.load()函数.

use*_*716 8

您可以使用jQuery的delay()方法,但是你需要你的插件调用添加使用队列jQuery的.queue()方法.

$('#menu_access').load(
    site_url + sUrl,
    function() {
        $(this).dolPopup(oPopupOptions);
        $(this).delay(3000)
               .queue( function( nxt ) {
                      $(this).dolPopupHide({});
                      nxt();
                });
    }
);
Run Code Online (Sandbox Code Playgroud)

请注意,.queue()需要调用传递给函数的参数,以便允许下一个动画发生(在任何时候).

作为替代方案,您可以使用setTimeout(),但您需要确保this回调中的值是正确的.

$('#menu_access').load(
    site_url + sUrl,
    function() {
        $(this).dolPopup(oPopupOptions);
        var that = this;
        setTimeout(function() {
                      $(that).dolPopupHide({});
                }, 3000);
    }
);
Run Code Online (Sandbox Code Playgroud)

this是变量引用的that.

或者您可以使用jQuery的$.proxy()方法来确保正确的含义this.

$('#menu_access').load(
    site_url + sUrl,
    function() {
        $(this).dolPopup(oPopupOptions);
        setTimeout($.proxy(function() {
                      $(this).dolPopupHide({});
                }, this), 3000);
    }
);
Run Code Online (Sandbox Code Playgroud)

  • +1 - 完整和正确,好奇其他答案如何得到+3,一个人的效率低,一个人错了......`setTimeout()`绝对是*去的方式. (2认同)

Dan*_*ert 5

使用电话 setTimeout(...)

$('#menu_access').load(
    site_url + sUrl,
    function() {
        var menuAccess = $(this);
        menuAccess.dolPopup(oPopupOptions);
        setTimeout(function () {
            menuAccess.dolPopupHide({});
        }, 3000);
    }
);
Run Code Online (Sandbox Code Playgroud)