eventos español ejemplos javascript html dom-events

javascript - español - attachevent



agregando múltiples escuchas de eventos a un elemento (8)

A menos que su función do_something realmente haga algo con cualquier argumento dado, puede pasarlo como el controlador de eventos.

const el = document.querySelector("#myId"); const eventHandler = { // called for each event on this element handleEvent(evt) { switch (evt.type) { case "click": case "touchstart": // click and touchstart share click handler this.handleClick(e); break; case "touchend": this.handleTouchend(e); break; default: this.handleDefault(e); } }, handleClick(e) { // do something }, handleTouchend(e) { // do something different }, handleDefault(e) { console.log("unhandled event: %s", e.type); } } el.addEventListener(eventHandler);

Así que mi dilema es que no quiero escribir el mismo código dos veces. Una vez para el evento clic y otro para el evento touchstart .

Aquí está el código original:

document.getElementById(''first'').addEventListener(''touchstart'', function(event) { do_something(); }); document.getElementById(''first'').addEventListener(''click'', function(event) { do_something(); });

¿Cómo puedo compactar esto? ¡Tiene que haber una manera más simple!


Este mini javascript libary (1.3 KB) puede hacer todas estas cosas

https://github.com/Norair1997/norjs/

nor.event(["#first"], ["touchstart", "click"], [doSomething, doSomething]);


Para una gran cantidad de eventos, esto podría ayudar:

var elem = document.getElementById(''first''); elem.addEventListener(''touchstart'', handler, false); elem.addEventListener(''click'', handler, false); function handler(event) { do_something(); }

Actualización 06/2017:

Ahora que las nuevas funciones de idioma están más disponibles, podría simplificar la adición de una lista limitada de eventos que comparten un oyente.

var first = document.getElementById(''first''); first.addEventListener(''touchstart'', do_something, false); first.addEventListener(''click'', do_something, false);

Si desea manejar muchos eventos y tiene diferentes requisitos por oyente, también puede pasar un objeto que la mayoría de la gente tiende a olvidar.

var element = document.getElementById("myId"); var myEvents = "click touchstart touchend".split(" "); var handler = function (e) { do something }; for (var i=0, len = myEvents.length; i < len; i++) { element.addEventListener(myEvents[i], handler, false); }


Puedes definir una función y pasarla. Las funciones anónimas no son especiales de ninguna manera, todas las funciones pueden pasarse como valores.

const element = document.querySelector("#myId"); function handleEvent(e) { // do something } // I prefer string.split because it makes editing the event list slightly easier "click touchstart touchend touchmove".split(" ") .map(name => element.addEventListener(name, handleEvent, false));


Sé que esta es una pregunta antigua, pero pensé que a algunos les podría resultar útil este enfoque; podría aplicarse a cualquier código similarmente repetitivo:

ES6

[''click'',''ontouchstart''].forEach( evt => element.addEventListener(evt, dosomething, false) );

ES5

[''click'',''ontouchstart''].forEach( function(evt) { element.addEventListener(evt, dosomething, false); });


Tal vez puedas usar una función de ayuda como esta:

// events and args should be of type Array function addMultipleListeners(element,events,handler,useCapture,args){ if (!(events instanceof Array)){ throw ''addMultipleListeners: ''+ ''please supply an array of eventstrings ''+ ''(like ["click","mouseover"])''; } //create a wrapper to be able to use additional arguments var handlerFn = function(e){ handler.apply(this, args && args instanceof Array ? args : []); } for (var i=0;i<events.length;i+=1){ element.addEventListener(events[i],handlerFn,useCapture); } } function handler(e) { // do things }; // usage addMultipleListeners( document.getElementById(''first''), [''touchstart'',''click''], handler, false);


Tengo una pequeña solución que se adhiere al prototipo.

document.getElementById(''first'').addEventListener(''touchstart'',myFunction); document.getElementById(''first'').addEventListener(''click'',myFunction); function myFunction(e){ e.preventDefault();e.stopPropagation() do_something(); }

Le permite darle una cadena o matriz. La cadena se puede separar con un espacio (''''), una coma ('','') O un punto y coma ('';'')


EventTarget.prototype.addEventListeners = function(type, listener, options,extra) { let arr = type; if(typeof type == ''string''){ let sp = type.split(/[/s,;]+/); arr = sp; } for(let a of arr){ this.addEventListener(a,listener,options,extra); } };

Debería usar e.stopPropagation() porque, de lo contrario, su función se activará dos veces en el dispositivo móvil.