2013-07-26 107 views
1

我使用這個例子用jQuery 1.9.1jQuery的KEYUP()延遲不工作

How to delay the .keyup() handler until the user stops typing?

延緩用戶停止鍵入後KEYUP請求。

// Custom Delay Function 
    var delay = (function(){ 
     var timer = 0; 

     return function(callback, ms){ 
      clearTimeout (timer); 
      timer = setTimeout(callback, ms); 
      }; 
    })(); 

    // Match Old Password 
    $('input[name="old_password"]').keyup(function(){ 
     delay(function(){ 
      var data = $.trim($(this).val()); 
      // Send request to check 
      /*$.post('admin/ajax/passReq.php', {action: 'old_match', data: data}, function(response){ 
       console.log('working'); 
      });*/ 
      console.log('working'); 
      }, 2000); 
    }); 

但我正在逐漸jQuery中:(

typeError: o.nodeName is undefined這是不工作的1.9.1或我必須用另一種方式來使用這個

UPDATE:http://jsfiddle.net/jogesh_pi/6mnRj/1/

+0

請用你的代碼創建一個jsFiddle。 –

回答

1

您在延遲調用中使用this$(this)將不會是文本框。

移動它的延時函數調用的外部:

$('input[name="old_password"]').keyup(function(){ 
    var el = $(this); 
    // ^^^^^^^^^^^^^ 
    delay(function(){ 
     ... 
     }, 2000); 
}); 
+0

謝謝你現在的工作,真的很愚蠢的錯誤我已經完成了.. –

0
// Match Old Password 
$('input[name="old_password"]').keyup(function(){ 
    var el = $(this); //you need this this. 
    delay(function(){ 
     var data = $.trim(el.val()); 
     // Send request to check 
     /*$.post('admin/ajax/passReq.php', {action: 'old_match', data: data}, function(response){ 
      console.log('working'); 
     });*/ 
     console.log('working'); 
     }, 2000); 
}); 
+3

給一個男人一條魚,你喂他一天。教一個人釣魚,你一輩子喂他 – mkoryak

+0

@mkoryak嘿,我正確地調出了'這個'關鍵字的上下文。這很可能是一個簡單的疏忽。 –

+1

我想我的意思是,「你需要這個」似乎沒有解釋太多的答案。他更可能粘貼你的工作代碼,並在2周內回來問相同的問題 – mkoryak

0

變化

var data = $.trim($(this).val()); 

var data = $.trim($('input[name="old_password"]').val()); 

您的代碼幾乎是正確的實際。

+0

如果該選擇器返回多個這些? - 這個建議不能一般地解決這個問題 – mkoryak

+0

@mkoryak這是一個設計問題。他應該爲控件使用不同的名稱。我基本上認爲設計是正確的,一些基本的東西應該以正常的方式編碼。 – zsong

+0

有一種方法可以回答這個問題,以便選擇器無關緊要 – mkoryak