1

我在 jQuery 1.9.1 中使用这个例子

如何延迟 .keyup() 处理程序直到用户停止输入?

在用户停止键入后延迟 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 );
    });

但我得到了typeError: o.nodeName is undefinedjquery :(

这在 1.9.1 上不起作用还是我必须以另一种方式使用它?

更新:http: //jsfiddle.net/jogesh_pi/6mnRj/1/

4

3 回答 3

1

this在延迟调用内部使用。并且$(this)不会是文本框。

将其移到延迟函数调用之外:

$('input[name="old_password"]').keyup(function(){
    var el = $(this);
    // ^^^^^^^^^^^^^
    delay(function(){
      ...
      }, 2000 );
});
于 2013-07-26T05:11:24.993 回答
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 );
});
于 2013-07-26T05:08:44.663 回答
0

改变

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

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

您的代码实际上几乎是正确的。

于 2013-07-26T05:13:19.107 回答