3

我有以下使用 Jquery UI 拖放的代码。当项目被拖放到该区域时,拖放区变为公司徽标,然后我想要延迟并重定向到拖放链接中的 URL。

我可以更改徽标或重定向 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);
}
4

1 回答 1

10

解释

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

在您的代码中,您立即调用了该函数(return无论如何它什么都没有,所以它的返回值是undefined......所以当达到超时时什么都不会执行)。

方法一

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

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

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

方法二

让你的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()对于某些较旧的浏览器,这需要 polyfill。


参考:

于 2013-05-15T21:13:52.630 回答