JavaScript onKeyUp задержка - PullRequest
       6

JavaScript onKeyUp задержка

3 голосов
/ 19 июля 2011

Мне нужна помощь с JavaScript-функцией, которую я вызываю onKeyUp, это Ajax-функция, но каждый раз, когда я пишу какой-либо символ, она вызывает функцию, и она замедляет работу страницы и каждый раз проверяет, что пользователь проверяет база данных.

Я пробовал это:

 var timer;
 function chk_me(){

   clearTimeout(timer);
   timer=setTimeout(function validate(){...},1000);
}

Но у моей функции проверки есть параметр, поэтому я не могу передать его, я вызываю функцию следующим образом:

<input type="text" name="usuario" id="usuario" class="required" onKeyUp="chk_me();" minlegth="4" value=/> 

Это правильно? Что мне делать?

Это мой первый вопрос, и я надеюсь, что вы все это понимаете

Спасибо, Alberto

Спасибо всем, так как я новичок, я не могу сделать это в другом ответе, поэтому я отредактировал свой вопрос с помощью решения. Я нахожу это: http://bytes.com/topic/javascript/answers/451142-need-advice-acting-only-last-onkeyup-event-series и использую метод последнего ответа и добавляю в него некоторый код, я оставляю вам код, как будто он говорит, что это не лучший способ, но работает, так что если у вас есть какой-то другой способ, я буду признателен и используйте это здесь:

var keyCount = 0;
var timeoutCount = 0;

function handleKeyUp() // keyup handler
{
keyCount++;
setTimeout("compareCounts()", 500);
}

function compareCounts()
{
var usuario = document.profileForm.usuario.value;
timeoutCount++;
if (keyCount == timeoutCount)
{
xajax_checaUsuario(usuario);
}
}

Итак, я принимаю вар таким образом любые предложения, чтобы сделать его лучше?

Спасибо

Ответы [ 3 ]

7 голосов
/ 19 июля 2011

Не передавайте validate напрямую setTimeout, а вызывайте его из анонимной функции:

var timer;
function chk_me(arg) {
    clearTimeout(timer);
    timer = setTimeout(function () {
        validate(arg);
    }, 1000);
}
0 голосов
/ 19 июля 2011

Если я правильно понял ваш вопрос, я думаю, что вы хотите, чтобы ваш параметр содержался в закрытии:

var timer;
function chk_me(myparam) {

    clearTimeout(timer);
    var validate = function() {

       //do stuff with myparam
       var foo = myparam;

    }
    timer=setTimeout(validate,1000);
}

Как и раньше, таймер гарантирует, что все предыдущие вызовы будут отменены, если не было 1второе ожидание, и когда вы определяете validate в области действия chk_me, локальная переменная myparam будет видна внутри нее, даже когда ее дескриптор передается в setTimeout.

0 голосов
/ 19 июля 2011

Вы можете сделать следующее

var timer;
 function chk_me(myparam){

   clearTimeout(timer);
   timer=setTimeout(function validate(){...},1000);
} 

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

<input type="text" name="usuario" id="usuario" class="required" onKeyUp="chk_me('stringval');" minlegth="4" value=/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...