jquery keyup()延迟不起作用

时间:2013-07-26 05:06:00

标签: javascript jquery

我在jQuery 1.9.1中使用这个例子

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

在用户停止输入后延迟键盘请求。

    // 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或者我必须以另一种方式使用它吗?

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

3 个答案:

答案 0 :(得分:1)

您在延迟通话中使用this$(this)不会是文本框。

将其移出延迟函数调用:

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

答案 1 :(得分: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 );
});

答案 2 :(得分:0)

更改

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

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

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