jQuery多个事件触发相同的function

有没有办法让keyupkeypressblurchange事件在一行中调用相同的函数,还是需要单独执行?

我遇到的问题是我需要使用db查找来validation一些数据,并且希望确保validation不会错过input或粘贴到框中的天气。

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

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

或者只是将该函数作为parameter passing给常规事件函数:

 var myFunction = function() { ... } $('#element') .keyup(myFunction) .keypress(myFunction) .blur(myFunction) .change(myFunction) 

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

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

我正在寻找一种方式来获得事件types,当jQuery同时收听几个事件,谷歌把我放在这里。

所以,对于那些感兴趣的, event.type是我的答案:

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

更多信息在jQuery文档 。

您可以使用绑定方法将function附加到多个事件。 只需传递事件名称和处理函数,如下所示:

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

另一个select是使用jquery api的链接支持。

如果将同一个事件处理程序附加到多个事件中,您经常遇到多个事件同时触发的问题(例如,用户在编辑之后按下Tab键,可能会激发按下button,更改和模糊)。

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

 $('#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. }); 

你可以定义你想要重用的函数,如下所示:

 var foo = function() {...} 

稍后,您可以设置您希望在对象上使用的多个事件侦听器,以使用on('event')在两者之间留出空间来触发该函数,如下所示:

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

这是我如何做到这一点。

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

Tatu的回答是,我会直观的做到这一点,但是在IE浏览器中遇到了一些嵌套/绑定事件的问题,尽pipe它是通过.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); 

这不是最漂亮的解决scheme,但它对我有用,我想我会放在那里帮助其他人可能会遇到这个问题

“有没有办法让keyupkeypressblurchange事件调用同一个函数?”

有可能使用.on() ,它接受以下结构: .on( events [, selector ] [, data ], handler ) ,所以你可以传递多个事件到这个方法。 你的情况应该是这样的:

 $('#target').on('keyup keypress blur change', function(e) { // "e" is an event, you can detect the type of event using "e.type" }); 

这就是现场的例子:

 $('#target').on('keyup keypress blur change', function(e) { console.log(`"${e.type.toUpperCase()}" event happened`) }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input id="target">