2013-06-11 9 views
0

Я создаю переменную в одной функции, а затем вызываю другую функцию, которую мне нужно передать этой переменной, как это сделать?передать переменную другой функции

код на данный момент:

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

спасибо!

ответ

8
setTimeout(showDesiredPage(), 600); 

не является правильным, оно должно быть

setTimeout(showDesiredPage, 600); 

Пожалуйста, обратите внимание на недостающие скобки после функции! Первая строка передает возвращаемое значение вашей функции (сразу же исполнено) в setTimeout, в то время как последний передает надпись , которая затем запускается после 600 мс! Поэтому в первом примере ваш код запускается немедленно, и setTimeout затем пытается вызвать возвращаемое значение вашей функции.

Именно по этой причине вы не можете передавать параметры «очевидным» способом. Если вы хотите сделать это, вам нужно (анонимно) функция обертка

setTimeout(function(){showDesiredPage(desiredPage)}, 600); 

Это передает объект функции (= вид такой же, как ссылки на функцию), чтобы SetTimeout, которые затем будут получать Вызывается после 600 мс. Теперь внутри функции вы можете вызвать нужную функцию с параметрами так же, как обычно.

Существует возможность передать параметры напрямую (see MDN:setTimeout), но, к сожалению, этот синтаксис не поддерживается Internet Exploder.

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]); 
+0

спасибо за это, объяснения помогли много – rpsep2

3

Попробуйте это:

$('.search-btn').click(function() { 
    var desiredPage = $(this).attr('goto'); 
    //other code is here 
    setTimeout(function() { 
     showDesiredPage(desiredPage); 
    }, 600); 
}); 

Это будет передавать переменную desiredPage функции showDesiredPage().

1

Вам необходимо включить переменную, которую вы хотите передать функции(). .

$ ('поиск-BTN ') нажмите (функция() { вар desiredPage = $ (это) .attr (' Гото'); // другой код здесь 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'); 
    } 
+2

Это не правильно! 'setTimeout' берет ссылку на функцию, а не результат функции.'showDesiredPage (wishPage)' оценивается сразу. –

+1

@KlausByskovPedersen Спасибо, что исправил меня. при проверке я пропустил проверку тайм-аута. – Praveen

+0

@ user1671639 Было бы лучше удалить ваш ошибочный код, чтобы избежать путаницы. – Christoph

Смежные вопросы