我有以下使用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);
}
答案 0 :(得分: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);
};
}
您可以使用.bind()
:
setTimeout(redirectLink.bind(null, url), 5000);
function redirectLink(url) {
window.location.replace(url);
}
请注意,.bind()
需要为某些旧浏览器提供填充。
参考文献: