2017-02-09 5 views
0

Я пытаюсь создать простой класс в Javascript, который позволяет пользователю проверить, является ли пользователь типом в поле ввода.Как построить метод обратного вызова?

Мой текущий код выглядит примерно так:

var CheckTyping = function(){ 
      return { 
       typingTimer: null, 
       doneTypingInterval: 2000, 
       doneTyping : false, 
       done : function(callback){ 
        return callback(); 
       }, 
       start: function(){ 
        clearTimeout(this.typingTimer); 
         this.typingTimer = setTimeout(this.done, this.doneTypingInterval); 
       }, 
       end: function(){ 
        clearTimeout(this.typingTimer); 
       } 
      } 
     }(); 

HTML:

<input onkeyup='CheckTyping.start()' onkeydown='CheckTyping.end()'> 

Я хочу, чтобы мой API, чтобы выглядеть следующим образом: JS

CheckTyping.done(function(){ 
     // this is my callback function which should work only when user is done typing. 
     // do something   
    }); 

В настоящее время функция обратного вызова выполняется автоматически. Я хочу Funtion запустить только тогда, когда его называют SetTimeout

ответ

1

Вы могли бы попробовать что-то вроде

return (function() { 
    var _done = null; 
    return { 
     typingTimer: null, 
     doneTypingInterval: 2000, 
     doneTyping : false, 
     done : function(callback){ 
      _done = callback; 
     }, 
     start: function(){ 
      clearTimeout(this.typingTimer); 
       this.typingTimer = setTimeout(_done, this.doneTypingInterval); 
     }, 
     end: function(){ 
      clearTimeout(this.typingTimer); 
     } 
    }; 
}()) 

или другими способами, чтобы сохранить обратный вызов. Затем используйте сохраненную функцию в тайм-ауте. Возможно, вы захотите изменить логику thoguh, чтобы метод end() запускал обратный вызов вместо таймаута. Ключ в том, что вы должны где-то сохранить обратный вызов, как написано, вы только что вызвали обратный вызов в тот момент, когда используете использованный метод.

+0

Спасибо, я был очень близок. :) – Mohan

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