Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用;关于;方法为多个选择器定义多个事件_Javascript_Jquery - Fatal编程技术网

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
。我可能在那里问过(是的,我刚说了一个新词;)