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

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


当前回答

用内置的DOM方法实现这个很简单,不需要像jQuery这样的大库,如果你想,它只需要更多的代码-迭代一个事件名称数组,并为每个事件添加一个侦听器:

function validate(event) {
  // ...
}

const element = document.querySelector('#element');
['keyup', 'keypress', 'blur', 'change'].forEach((eventName) => {
  element.addEventListener(eventName, validate);
});

如果你想模拟添加多个元素:

const elements = document.querySelectorAll('.commonSelector');
['keyup', 'keypress', 'blur', 'change'].forEach((eventName) => {
  elements.forEach(element => {
      element.addEventListener(eventName, validate);
  });
});

其他回答

Tatu的答案是我如何直观地做到这一点,但我在Internet Explorer中遇到了一些问题,这种嵌套/绑定事件的方式,即使它是通过.on()方法完成的。

我还不能准确地指出问题出在jQuery的哪个版本上。但我有时会在以下版本中看到问题:

2.0.2 1.10.1 1.6.4, 移动1.3.0b1 移动1.4.2 移动1.2.0

我的解决方法是先定义函数,

function myFunction() {
    ...
}

然后分别处理这些事件

// Call individually due to IE not handling binds properly
$(window).on("scroll", myFunction);
$(window).on("resize", myFunction);

这不是最漂亮的解决方案,但它适合我,我想我会把它放在那里,以帮助其他可能偶然发现这个问题的人

我就是这么做的。

$("input[name='title']").on({
    "change keyup": function(e) {
        var slug = $(this).val().split(" ").join("-").toLowerCase();
        $("input[name='slug']").val(slug);
    },
});

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

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

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

更多信息请参阅jQuery文档。

$("element").on("event1 event2 event..n", function() {
   //execution
});

本教程是关于处理多个事件的。

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

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