2012-03-23 8 views
2

これは私の試みですが、私は 'checker(thisVal)'が問題を引き起こしていると考えています。テキストボックスの値をチェックする方法と3秒間何も変更していない場合は何かしますか?そうでない場合は3秒後にもう一度チェックしますか?

$("#search-input").keyup(function() { 
     var thisVal = $(this).val(); 
     if(thisVal!=''){ 

      var checker = function (v){ 
       if($(this).val() !=v){ 
        setTimeout('checker(thisVal)', 3000); 
       } 
       else{ 
        console.log($(this).val()); 
       } 
      } 
      setTimeout(function(){checker(thisVal)}, 3000); 

     } 
    }); 

ありがとうございます。私はあなたを信じて

+1

問題は? – Dogbert

+0

値をsetTimeoutに渡すことはできません。 –

答えて

3

はタイムアウトラインのためにこれをしたい:

setTimeout(function(){checker(thisVal)}, 3000); 

編集:このコードを試してみてください。

$("#search-input").keyup(function() { 
    var thisVal = $(this).val(); 
    if (thisVal !== '') { 

     var checker = function(v) { 
      if (thisVal !== v) { 
       setTimeout('checker(thisVal)', 3000); 
      } 
      else { 
       console.log(thisVal); 
      } 
     } 

     setTimeout(function() { 
      checker(thisVal) 
     }, 3000); 
    } 
});​ 

Demo

+0

これでエラーは解決しましたが、ここで新しいものがあります:console.log($(this).val());私の編集したコードを見てください。ありがとうございました。 –

+0

エラーは未定義のtoLowerCaseメソッドを呼び出すことができず、console.log行を指しています –

+0

これはcheckerがkeyupイベントではなくsetTimeoutから呼び出されたときに 'this'が変更されたためです。 – apsillers

0

は、私は、関数が実行されるときにthisを定義できます私はFunction.callを使用して問題

var that = $(this); 
var thisVal = that.val(); 
var refreshIntervalId = setInterval(function(){ 
    if(that.val() === thisVal){ 
    console.log(thisVal);   
    }   
}, 3000); 

clearInterval(refreshIntervalId);//will stop the checks 
1
setTimeout(function(){checker.call($('#search-input').get(0), thisVal)}, 3000); 

に異なるアプローチを取るだろうと思います。 checkerkeyupイベントから実行される場合、thisが入力要素です。 setIntervalから実行されている場合、通常はウィンドウオブジェクトであるthisです。 call関数を使用すると、thisを再び入力要素に設定できます。

関連する問題