Javascript 使用;关于;方法为多个选择器定义多个事件
Javascript 使用;关于;方法为多个选择器定义多个事件,javascript,jquery,Javascript,Jquery,let test=函数(e){ 如果(e.type==='单击'| | e.which===13){ log($('input[type=text]').val()); } }; $(document).on('keyup','input[type=text]',test); $(文档)。在('click','button',test') 测试如果您直接附加侦听器,而不是通过$(文档)附加侦听器,它将更具可读性 您能到达的最近距离是: $(document).on('keyup', 'inpu
let test=函数(e){
如果(e.type==='单击'| | e.which===13){
log($('input[type=text]').val());
}
};
$(document).on('keyup','input[type=text]',test);
$(文档)。在('click','button',test')代码>
测试
如果您直接附加侦听器,而不是通过$(文档)
附加侦听器,它将更具可读性
您能到达的最近距离是:
$(document).on('keyup', 'input[type=text]', test)
.on('click', 'button', test);
…与您的第一个版本相比,这显然没有多大变化
因为要在单独的元素上挂接单独的(委托的)事件,所以必须对
调用进行单独的
当然,如果您愿意,您可以为自己提供一个插件:
$.fn.onAll = function(spec) {
Object.keys(spec).forEach(key => {
this.on(key, ...spec[key]);
});
return this;
};
具体的一个将这样使用:
$(document).onAll({
keyup: ['input[type=text]', test],
click: ['button', test]
});
…这看起来不像是一种编码节约,但也许您可以想出更简洁的方法。:-)
实例:
$.fn.onAll=函数(规范){
Object.key(spec.forEach)(key=>{
这个。关于(键,…规范[键]);
});
归还这个;
};
设测试=功能(e){
如果(e.type==='单击'| | e.which===13){
log($('input[type=text]').val());
}
};
$(文档).onAll({
keyup:['input[type=text]',test],
点击:[“按钮”,测试]
});代码>
测试可以通过检查事件类型和活动元素来完成
$(文档).on('keyup click','input[type=text],button',函数(e){
var$this=$(this);
var eventType=e.type;
如果(e.type=='click'&&$this.is('button')){
console.log('click+按钮');
}
else if(e.type=='keyup'&&$this.is('input[type=text]')){
log('keyup+input[type=text]”);
}
});代码>
点击代码>好吧,TJ Crowder在这个问题上已经有了一个很好的答案(我更喜欢这样),但是如果你真的想知道你是如何描述它的,你可以这样做:
$(document).onAll({
keyup: ['input[type=text]', test],
click: ['button', test]
});
功能测试(){
$(“#log”)。追加(“Fire
”;
}
函数注册表事件(输入、元素、回调){
var inputarr=input.split(“,”),
elementarr=elements.split(“,”),
$document=$(document);//缓存
对于(变量i=0,j=input.length;i
点击我
很抱歉,但是。。。为什么?@IaconisSimone(为了更快地编写代码)
@foo好的代码比“更快地编写”的代码要好。这没有任何意义,你可以节省2秒钟的编写时间,但将来你还需要2分钟才能理解它,这不是易读的。制作智能代码,但要让它有意义。1。不,不会的。2.那么他们就不会被授权,这大概很重要。3.这并没有回答OP提出的问题。非常感谢!还有。。。。。。我的子问题是:我的问题怎么会变成坏问题?我只是想知道有没有其他方法来定义事件?正如你所见,有人知道,有人不知道(1个答案得到-2,1个答案被删除。)@foo:我不认为这是一个坏问题。我的猜测(仅此而已)是,下层选民认为评论会回答这个问题,所以他们说“缺乏研究努力”。但这是我在他们口中说的话。(至于被否决的——至少有一个被删除的——回答:他们不做或回答你提出的问题。)另一个可行的选择。处理程序中有更多的工作,但是处理程序中已经有逻辑来区分事件,所以。。。(不需要调用is
,但这是jQuery的方式;我只需要使用this.tagName==“BUTTON”
)你说得对is
。我可能在那里问过(是的,我刚说了一个新词;)