jQuery多个事件触发相同的功能

有没有办法让keyupkeypressblurchange事件在一行中调用相同的函数,仍是必须单独执行? jquery

我遇到的问题是我须要使用数据库查找验证一些数据,而且但愿确保在任何状况下都不会错过验证,不管是键入仍是粘贴到框中。 数据库


#1楼

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

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

#2楼

我正在寻找一种方法来获取事件类型,当jQuery一次监听多个事件时,谷歌把我放在这里。 函数

因此,对于那些感兴趣的人, event.type是个人答案: this

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

jQuery doc中的更多信息。 spa


#3楼

您能够使用bind方法将函数附加到多个事件。 只需传递事件名称和处理函数,以下代码所示: code

$('#foo').bind('mouseenter mouseleave', function() {
  $(this).toggleClass('entered');
});

另外一种选择是使用jquery api的连接支持。 seo


#4楼

您能够使用.on()将函数绑定到多个事件: 事件

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

或者只是将函数做为参数传递给普通事件函数: element

var myFunction = function() {
   ...
}

$('#element')
    .keyup(myFunction)
    .keypress(myFunction)
    .blur(myFunction)
    .change(myFunction)

#5楼

若是您将相同的事件处理程序附加到多个事件,您常常遇到一次触发多个事件的问题(例如,用户在编辑后按Tab键; keydown,change和blur可能所有触发)。

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

$('#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.
});
相关文章
相关标签/搜索