2013-07-16 6 views
0

Я не могу получить доступ к переменной внутри функции settimeout i.e в следующем примере setTimeout (pop.hide()), 3000); здесь pop.hide() не работает внутри SetTimeout ...Доступ к переменной внутри функции settimeout

Любые решения ..

HTML

<div id="logincheck"></div> 

JS:

function logClick() { 
        var sEmail = $('#username').val(); 
        var sPassword = $('#password').val(); 

        var pop = $('#logincheck'); 

        if (($.trim(sEmail).length == 0) && ($.trim(sPassword).length == 0)) { 

         pop.show(); 

         pop.html('Enter EmailId and Password '); 
         setTimeout(pop.hide()), 3000); 
        } 

Благодаря AB

ответ

3

Вы вызоваpop.hide() и передавая ее возвращаемое значение в setTimeout. Точно так же foo(bar())звонитbar и передает его возвращаемое значение в foo. (Или, скорее, вы бы, но у вас есть дополнительный ) там, так что это на самом деле ошибка синтаксиса   — вы должны видеть, что ошибка синтаксиса в консоли JavaScript.)

Вы ищете:

setTimeout(function() { 
    pop.hide(); 
}, 3000); 

Здесь мы определяем (но не вызываем) анонимную функцию и передаем ссылку на эту функцию в setTimeout. Когда таймер истекает, эта функция вызывается, и она вызывает pop.hide().

Или так как вы используете JQuery, вы можете использовать его $.proxy:

setTimeout($.proxy(pop.hide, pop), 3000); 
// or 
setTimeout($.proxy(pop, "hide"), 3000); 

Или если у вас есть ES5-х bind доступны (изначально или через ES5 прокладки):

setTimeout(pop.hide.bind(pop), 3000); 

Те как по существу делают то же, что и наша анонимная функция выше.

+1

Crowser +1 Хороший ответ, объяснил во всех возможных углов :) – Praveen

1

вы c ульд использовать следующее (анонимные функции)

setTimeout(function() { 
    pop.hide() 
}, 3000); 

Кстати, есть ошибка синтаксиса (дополнительный )) в коде SetTimeout

0

Присвоить поп logincheck

вар поп = $ ('# logincheck');

вызовов установить таймаут этот путь

setTimeout(function(){ pop.hide()} , 3000); 
+1

Существует абсолютно никаких причин, чтобы сделать 'поп 'global (или, по крайней мере, переместить его за пределы своего приятного контейнера [' logClick']). И куча причин не делать этого. –

+0

@ T.J.Кроудер. Моя ошибка, ты абсолютно прав. Позвольте мне изменить код. Подпишитесь на свой комментарий от меня! –