让setTimeout工作

时间:2013-05-15 21:12:12

标签: javascript jquery jquery-ui jquery-draggable jquery-droppable

我有以下使用Jquery UI Drag and Drop的代码。当项目被放入该区域时,放置区域将更改为公司徽标,然后我希望延迟并重定向到已删除链接中的URL。

我可以更改徽标或更改重定向的网址但不是两者都有,当我同时设置时,延迟不会发生,重定向就会开始。我假设我在使用setTimeout做错了。

代码如下:

// let the trash be droppable, accepting the gallery items
$( "#droparea" ).droppable({
  accept: "ul.gallery > li a",
  activeClass: "ui-state-highlight",
  drop: function( event, ui ) {

      var thelink = $(ui.draggable).attr("href");
      $('#droparea').prepend('<img id="theImg" src="../img/logo_navigation.jpg" />');

      setTimeout(redirectLink(url),5000);
  }
});

// URL REDIRECT FUNCTION
function redirectLink(url)
{
   window.location.replace(url);
}

1 个答案:

答案 0 :(得分:10)

说明

您需要将函数引用(或一串JavaScript代码)传递给setTimeout,以便在达到超时时执行它。

在您的代码中,您立即调用该函数(无论如何都不会return任何内容,因此其返回值为undefined ...因此不执行任何操作达到超时时。)

方法1

使用运行代码的匿名函数:

setTimeout(function () {
    redirectLink(url);
}, 5000);

function redirectLink(url) {
   window.location.replace(url);
}

方法2

让您的redirectLink函数返回一个函数并像原先一样调用它:

setTimeout(redirectLink(url), 5000);

function redirectLink(url) {
    return function () {
        window.location.replace(url);
    };
}

方法3

您可以使用.bind()

setTimeout(redirectLink.bind(null, url), 5000);

function redirectLink(url) {
   window.location.replace(url);
}

请注意,.bind()需要为某些旧浏览器提供填充。


参考文献: