将变量传递给另一个函数

时间:2013-06-11 11:36:59

标签: jquery variables

我在一个函数中创建一个变量,然后调用另一个我需要传递这个变量的函数,我该怎么做?

目前

代码:

$('.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');
}

谢谢!

3 个答案:

答案 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');
    }