是否有一种方法可以让按键、按键、模糊和更改事件在一行中调用相同的函数,或者我必须分别执行它们?

我的问题是,我需要验证一些数据与数据库查找,并希望确保验证不错过在任何情况下,无论是键入或粘贴到框。


当前回答

我正在寻找一种方法来获得事件类型时,jQuery监听几个事件,谷歌把我放在这里。

对于那些感兴趣的人,event。键入是我的答案:

$('#element').on('keyup keypress blur change', function(event) {
    alert(event.type); // keyup OR keypress OR blur OR change
});

更多信息请参阅jQuery文档。

其他回答

从jQuery 1.7开始,.on()方法是将事件处理程序附加到文档的首选方法。对于早期版本,.bind()方法用于将事件处理程序直接附加到元素。

$(document).on('mouseover mouseout',".brand", function () {
  $(".star").toggleClass("hovered");
})

如果你将同一个事件处理程序附加到几个事件上,你经常会遇到多个事件同时触发的问题(例如,用户在编辑后按tab键;按键、改变和模糊都可能触发)。

听起来你真正想要的是这样的:

$('#ValidatedInput').keydown(function(evt) {
  // If enter is pressed
  if (evt.keyCode === 13) {
    evt.preventDefault();

    // If changes have been made to the input's value, 
    //  blur() will result in a change event being fired.
    this.blur();
  }
});

$('#ValidatedInput').change(function(evt) {
  var valueToValidate = this.value;

  // Your validation callback/logic here.
});

而不是:

$('#element').on('keyup keypress blur change', function(e) {
    // e.type is the type of event fired
});

你可以使用:

$('#element').on('input', function(e) {
    // e.type is the type of event fired
});

输入触发键up键按模糊改变事件,甚至粘贴!

但为了防止多重触发:

var a;
var foo = function() {
    clearTimeout(a);
    a=setTimeout(function(){
        //your code
        console.log("Runned")
    },50);
}
$('textarea').on('blur change', foo);

你可以这样定义你想重用的函数:

var foo = function() {...}

之后,你可以在你的对象上设置任意数量的事件监听器来触发该函数,使用on('event'),在中间留出一个空间,如下所示:

$('#selector').on('keyup keypress blur change paste cut', foo);