7

Problem: The blur and keyup events each fire once onload, and only onload. How can I get them to work correctly?

jQuery:

function myFunction(text){
    alert(text);
}
$('#input1').on({
    keyup: myFunction('keyup'),
    blur: myFunction('blur'),
    focus: function(){console.log('focus!');}
});

Fiddle: https://jsfiddle.net/GrMQX/

4

5 回答 5

13

您没有将函数分配给keyupand blur,而是将执行结果分配给myFunction.

像这样改变它:

$('#input1').on({
    keyup: function() { myFunction('keyup'); },
    blur:  function() { myFunction('blur'); },
    focus: function() { console.log('focus!'); }
});

演示

于 2013-05-20T16:40:54.433 回答
6

您没有将函数声明为回调,而是在执行它们,并且它们的返回结果被分配为回调(这不起作用)。

尝试这个:

  $('#input1').on({
    keyup: function() { myFunction('keyup') },
    blur: function() { myFunction('blur') },
    focus: function(){console.log('focus!');}
  });
于 2013-05-20T16:40:28.707 回答
6

您需要将函数作为参数传递..您正在传递被调用函数的返回值

function myFunction(text){
    alert(text);
}
$('#input1').on({
    keyup: function(){myFunction('keyup');},
    blur: function(){myFunction('blur');},
    focus: function(){console.log('focus!');}
});

或者您可以将您的转换myFunction为函数发生器

function myFunction(text){
   return function(){
       console.log(text);
   }
}

$('#input1').on({
    keyup: myFunction('keyup'),
    blur: myFunction('blur'),
    focus: function(){console.log('focus!');}
});

演示在 https://jsfiddle.net/gaby/GrMQX/6/

于 2013-05-20T16:40:47.060 回答
4

当您以这种方式调用函数时,您实际上是在执行这些函数。尝试这个:

$('#input1').on({
    keyup: function(){myFunction('keyup')},
    blur: function(){myFunction('blur')},
    focus: function(){console.log('focus!');}
});

JSFiddle 示例

于 2013-05-20T16:40:40.540 回答
0

与 .on() 事件一起使用

$(document).on("keyup blur", "#input1", function(event)
    {       
    // your code        

    });
于 2013-12-31T06:52:07.553 回答