jQuery多个事件触发相同的function
有没有办法让keyup , keypress , blur和change事件在一行中调用相同的函数,还是需要单独执行? 
我遇到的问题是我需要使用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,但它对我有用,我想我会放在那里帮助其他人可能会遇到这个问题
  “有没有办法让keyup , keypress , blur和change事件调用同一个函数?” 
 有可能使用.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">