我在一个函数中创建一个变量,然后调用另一个我需要传递这个变量的函数,我该怎么做?
目前代码:
$('.search-btn').click(function(){
var desiredPage = $(this).attr('goto');
//other code is here
setTimeout(showDesiredPage(), 600);
});
然后:
function showDesiredPage(desiredPage){
// other code happens
$('#'+desiredPage).addClass('current-page');
}
谢谢!
答案 0 :(得分:8)
setTimeout(showDesiredPage(), 600);
不正确,需要
setTimeout(showDesiredPage, 600);
请注意功能后缺少的括号! 第一行将你的(立即执行的)函数的返回值移交给setTimeout,而后者移交函数引用,然后在600ms后执行!因此,在第一个示例中,您的代码会立即触发,然后setTimeout会尝试调用函数的返回值。
这就是为什么你不能以“明显”的方式交出参数的原因。如果你想这样做,你需要一个(匿名)函数包装器
setTimeout(function(){showDesiredPage(desiredPage)}, 600);
这会将一个函数对象(=类似于函数引用的类型)传递给setTimeout,然后在600ms后调用它。现在,在函数内部,您可以使用与通常相同的方式调用所需函数。
有可能直接移交参数(see MDN:setTimeout),但遗憾的是,Internet Exploder不支持此语法。
var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
答案 1 :(得分:3)
试试这个:
$('.search-btn').click(function () {
var desiredPage = $(this).attr('goto');
//other code is here
setTimeout(function () {
showDesiredPage(desiredPage);
}, 600);
});
这会将变量desiredPage
传递给函数showDesiredPage()
。
答案 2 :(得分:1)
您需要包含要传递给函数的变量()。
$( '搜索BTN')。点击(函数(){ var desiredPage = $(this).attr('goto'); //其他代码在这里 setTimeout(showDesiredPage(desiredPage),600); });
function showDesiredPage(desiredPage){
// other code happens
$('#'+desiredPage).addClass('current-page');
}
<击>
编辑:以上内容会传递该值,但延迟时间将无效。
应该是
$('.search-btn').click(function(){
var desiredPage = $(this).attr('goto');
//other code is here
setTimeout(function () {
showDesiredPage(desiredPage);
}, 600);
});
function showDesiredPage(desiredPage){
// other code happens
$('#'+desiredPage).addClass('current-page');
}