绑定多个事件并排除其他事件
jQuery - bind multiple events and exclude other events
我有一个搜索表单,有<input type="text">
和<select>
形式元素。在这个表单中,我有这个jQuery。
$('#searchform :input').stop().on('keyup change',function(){
// do some ajax stuff
})
棘手的是脚本使用.on('keyup change' etc.)
侦听多个事件的方式。这工作得很好,但有一个问题…
当输入字段失去焦点时,脚本jquery侦听器被触发。
这里有一个演示来解释我的意思https://jsfiddle.net/o2k4jf90/1/
我想做这样的事情…
$('#searchform :input').stop().on('keyup change not:blur',function(){
// do some ajax stuff
})
…但这显然是无稽之谈。我能做什么?
尝试用input
事件替换change
、keyup
事件
$(document).ready(function () {
$(':input').on('input',function(e) {
$('#report').append('stuff happened<br />');
})
});
jsfiddle https://jsfiddle.net/o2k4jf90/3/
这个问题是因为当input
字段失去焦点时,以及当select
的选择选项被修改时,change
事件会触发。要实现所需的功能,需要分别绑定事件。试试这个:
$(document).ready(function () {
$('input').keyup(stuffHappened);
$('select').change(stuffHappened);
})
function stuffHappened() {
$('#report').append('stuff happened<br />');
}
更新小提琴
如果您将事件挂钩到form
,您仍然可以使用单个事件处理程序,但是您需要检查事件的type
和target.tagName
以实现相同的逻辑,这一点都不美观:
$('form').on('keyup change', function(e) {
if ((e.type == 'change' && e.target.tagName == 'SELECT')
|| (e.type == 'keyup' && e.target.tagName == 'INPUT')) {
$('#report').append('stuff happened<br />');
}
});
基于这个原因,我建议使用前一种方法
相关文章:
- 单击事件以排除子项(主干.js)
- 排除事件操作的事件侦听
- 从“onblur”事件中排除表单按钮,JavaScript
- 如何在绑定事件期间排除元素
- 如何在jquery.click()事件中排除元素类作为目标
- 从beforeunload事件中排除提交按钮
- 将Click事件放在表格行上,但排除其中一列
- Jquery从中排除一个事件
- Jquery排除单击时的第一个td事件
- 如何对触发两次的点击事件进行故障排除
- 排除jQuery事件中的兄弟事件
- 排除全日历重复事件
- jQuery绑定,当所有本地域内容被加载时调用一个函数,但从该事件中排除远程社交链接
- 从事件监听器中排除按钮
- 如何从jQuery事件处理程序中排除子元素
- jQuery在click事件中排除子元素
- 用于关键事件输入验证的Javascript正则表达式故障排除帮助
- 绑定多个事件并排除其他事件
- 从触发的事件 jquery 中排除类
- 从单击事件处理程序 (jquery) 中排除元素