2012-04-06 3 views
0

Я пытаюсь установить «mouseactive» на true менее секунды после команды ключа, но я хотел бы отменить это действие, если клавиша нажата в течение этого периода времени. Однако я не могу понять, как это сделать. Это то, что у меня есть ...Устранение неполадок setTimeout

$(window).keydown(function(e) { 
if (e.keyCode == 40) { 
     e.preventDefault(); 
     mouseactive = false; 
     clearTimeout(t); 
     var t = setTimeout("mouseActive()",800); 
} else if (e.keyCode == 38) { 
     e.preventDefault(); 
     mouseactive = false; 
     clearTimeout(t); 
     var t = setTimeout("mouseActive()",800); 
} 
}); 

function mouseActive() { 
mouseactive = true; 
} 

Но это не работает, она не устанавливает mouseactive назад правда ... может кто-нибудь сказать мне, что я делаю неправильно здесь?

ответ

2

Редактировать: Очистить избыточный код.

Другие изменения: Убедитесь, что var t определена вне любого закрытия, включая $(document).ready. См. Ниже,

var t = null; 

$(document).ready(function() { 
    //..below code except for var t = null 
}); 

Объявление var t вне обработчика.

var t = null; 
$(window).keydown(function(e) { 
    e.preventDefault(); 

    if (e.keyCode == 40) { 
     mouseactive = false; 
    } else if (e.keyCode == 38) { 
     mouseactive = false; 
    } 

    if (t != null) clearTimeout(t); 
    t = setTimeout(mouseActive, 800); 
}); 

function mouseActive() { 
    mouseactive = true; 
} 
+0

Вы не должны передавать строки в 'setTimeout', вы должны передавать функции. Он использует 'eval', когда передается строка. 't = setTimeout (mouseActive, 800);' –

+0

@Rocket mm .. Я только что очистил его код .. это тоже включено в очистку .. Спасибо, хотя! У меня было это как строка в моем начальном посте перед очисткой. –

+0

Спасибо, что сделал трюк, очень оценили. – Ian

1

вы повторного объявления «т» все время, попробуйте следующее:

var t = null; 
$(window).keydown(function(e) { 
    if (e.keyCode == 40) { 
      e.preventDefault(); 
      mouseactive = false; 
      if(t != null) 
      { 
       clearTimeout(t); 
      } 
      t = setTimeout("mouseActive()",800); 
    } else if (e.keyCode == 38) { 
      e.preventDefault(); 
      mouseactive = false; 
      if(t != null) 
      { 
       clearTimeout(t); 
      } 
      t = setTimeout("mouseActive()",800); 
    } 
    }); 

    function mouseActive() { 
    mouseactive = true; 
    } 
+0

Вам не следует передавать строки в 'setTimeout', вы должны передавать функции. Он использует 'eval', когда передается строка. 't = setTimeout (mouseActive, 800);' –

2

Ваша проблема заключается в том, что t не в рамках 2-й раз при запуске функции. Вы должны сделать t глобальной переменной.

var t; 

$(window).keydown(function(e) { 
if (e.keyCode == 40) { 
     e.preventDefault(); 
     mouseactive = false; 
     clearTimeout(t); 
     t = setTimeout(mouseActive,800); 
} else if (e.keyCode == 38) { 
     e.preventDefault(); 
     mouseactive = false; 
     clearTimeout(t); 
     t = setTimeout(mouseActive,800); 
} 
}); 

function mouseActive() { 
mouseactive = true; 
} 

P.S. Не пропускайте строки до setTimeout, пропустите функции. Он использует eval, когда вы передаете строки.

+0

Ну как ни странно, когда я не использую «var», тогда вся вещь ломается ... – Ian

+0

Nvm, это потому, что я не определял ее с помощью «var t» до , Спасибо – Ian

+0

Добро пожаловать :-) –

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