Answers:
您可以.on()
用来将一个函数绑定到多个事件:
$('#element').on('keyup keypress blur change', function(e) {
// e.type is the type of event fired
});
或者只是将函数作为参数传递给常规事件函数:
var myFunction = function() {
...
}
$('#element')
.keyup(myFunction)
.keypress(myFunction)
.blur(myFunction)
.change(myFunction)
on('click tap', e => {...})
。监听器可能被触发两次,我只想触发一次,如何在监听器函数中编码?
$('#element:not(.busy)').on('keyup keypress blur change', function(e){…});
最后删除className'busy'。
从jQuery 1.7开始,该.on()
方法是将事件处理程序附加到文档的首选方法。对于早期版本,该.bind()
方法用于将事件处理程序直接附加到元素。
$(document).on('mouseover mouseout',".brand", function () {
$(".star").toggleClass("hovered");
})
当jQuery一次侦听多个事件时,我一直在寻找一种获取事件类型的方法,而Google将我放在这里。
因此,对于那些感兴趣的人,event.type
我的答案是:
$('#element').on('keyup keypress blur change', function(event) {
alert(event.type); // keyup OR keypress OR blur OR change
});
jQuery文档中的更多信息。
如果将同一事件处理程序附加到多个事件,则经常会遇到多个问题,即一次触发(例如,用户在编辑后按下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.
});
这就是我的方法。
$("input[name='title']").on({
"change keyup": function(e) {
var slug = $(this).val().split(" ").join("-").toLowerCase();
$("input[name='slug']").val(slug);
},
});
您可以如下定义要重用的函数:
var foo = function() {...}
之后,您可以使用on('event')在对象上设置任意数量的事件监听器,以触发该函数,如下所示:
$('#selector').on('keyup keypress blur change paste cut', foo);
Tatu的答案是我将如何直观地做到这一点,但是即使通过此.on()
方法完成嵌套/绑定事件,我在Internet Explorer中还是遇到了一些问题。
我无法确切指出这是哪个版本的jQuery。但是我有时会在以下版本中看到问题:
我的解决方法是先定义函数,
function myFunction() {
...
}
然后分别处理事件
// Call individually due to IE not handling binds properly
$(window).on("scroll", myFunction);
$(window).on("resize", myFunction);
这不是最漂亮的解决方案,但对我有用
有没有一种方法有
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">
.on('keyup.foo keypress.foo blur.foo change.foo', …)
还是.on('keyup keypress blur change .foo', …)
?