Javascript 使用带有jQuery的setTimeout排序函数时出现问题
我正在使用一些jQuery代码创建选项卡,其中页面内容被分成几个部分(可从选项卡块顶部导航),并希望在单击“下一个”或“上一个”链接(位于每个选项卡内容的底部)时执行以下操作:Javascript 使用带有jQuery的setTimeout排序函数时出现问题,javascript,jquery,tabs,settimeout,Javascript,Jquery,Tabs,Settimeout,我正在使用一些jQuery代码创建选项卡,其中页面内容被分成几个部分(可从选项卡块顶部导航),并希望在单击“下一个”或“上一个”链接(位于每个选项卡内容的底部)时执行以下操作: 要向上滚动到选项卡块顶部的页面(使用“.scrollTo”插件成功实现)超过750ms 滚动后,选项卡将更改为相应的“上一页”或“下一页”选项卡(由标签url标识)-250毫秒后 使用以下代码: $(".external_link").click(function() { $.scrollTo(515, 750, {ea
$(".external_link").click(function() {
$.scrollTo(515, 750, {easing:'easeInOutQuad'});
setTimeout(changeTab($(this).attr("href")), 1000);
return false;
});
这两件事在密苏里州同时发生。如果有人能告诉我我做错了什么,我将非常感激
守则全文如下:
$(document).ready(function() {
$(".tab_content").hide();
$("ul.content_tabs li:first").addClass("active").show();
$(".tab_content:first").show();
$('.content_tabs li').each(function(i) {
var thisId = $(this).find("a").attr("href");
thisId = thisId.substring(1,thisId.length) + '_top';
$(this).attr("id",thisId);
});
function changeTab(activeTab) {
$("ul.content_tabs li").removeClass("active");
$(activeTab + '_top').addClass("active");
$(".tab_content").hide();
$(activeTab).fadeIn();
}
//check to see if a tab is called onload
if (location.hash!=""){changeTab(location.hash);}
//if you call the page and want to show a tab other than the first, for instance index.html#tab4
$("ul.content_tabs li").click(function() {
if ($(this).hasClass("active"))
return false;
changeTab($(this).find("a").attr("href"));
return false;
});
$(".external_link").click(function() {
$.scrollTo(515, 750, {easing:'easeInOutQuad'});
setTimeout(changeTab($(this).attr("href")), 1000);
return false;
});
});
我尝试使用setTimeout执行此操作对吗?我的知识极其有限
setTimeout(changeTab($(this).attr("href")), 1000);
这是错误的,你必须输入一个函数,而不是执行一个函数的结果,250毫秒更有意义。changeTab是函数,changeTab(参数)是执行函数。所以试试看
var that = $(this);
setTimeout(function() {changeTab(that.attr("href"))}, 250);
我认为它们同时执行的原因是,当设置超时时,您直接调用changeTab函数,而上一个函数在继续之前等待750ms。您正在将函数调用传递给
setTimeout()
。您需要传递一个函数引用。调用将立即执行,但函数引用将在超时过期时执行。像这样调用setTimeout()
:
setTimeout(function() { changeTab($(this).attr("href")); }, 1000);
此外,您应该考虑利用<代码> ON/<代码>选项,该选项指示在滚动完成时调用的函数。这样做可能更有意义:
$.scrollTo(515, 750, {
easing: 'easeInOutQuad',
onAfter: function () {
setTimeout(function() { changeTab($(this).attr("href")); }, 250);
}
});
完美的非常感谢!:)