Skip to content

Instantly share code, notes, and snippets.

@HDDen
Last active December 2, 2022 14:48
Show Gist options
  • Save HDDen/9475da030638648dfd0c43391dcbd5fa to your computer and use it in GitHub Desktop.
Save HDDen/9475da030638648dfd0c43391dcbd5fa to your computer and use it in GitHub Desktop.
Wrapper for addEventListener(), allow to set callback for NodeList, single element, and by selector string
function addListener(what, cbk, action, deferred, deferred_listener, onAddCallback){
var what = what || false;
var cbk = cbk || false;
var action = action || 'click';
var deferred = deferred || false;
var deferred_listener = deferred_listener || document.documentElement;
var onAddCallback = onAddCallback || false;
if (!action){
action = 'click'; // тут не уверен, если пробросим false или null как будет себя вести, потому такая доп. проверка
}
if (what && cbk){
if (typeof what === 'string'){
if (deferred){
if (typeof deferred_listener === 'string'){
deferred_listener = document.querySelector('deferred_listener');
} else if (deferred_listener instanceof HTMLElement){
//deferred_listener = deferred_listener;
} else {
deferred_listener = false;
}
// проверяем наличие
if (!deferred_listener){
deferred_listener = document.documentElement;
}
// назначаем
deferred_listener.addEventListener(action, function(e){
if (e.target.closest(what)){
cbk(e);
}
});
} else {
var el = document.querySelectorAll(what);
var length = el.length;
if (length){
for (var i = 0; i < length; i++){
el[i].addEventListener(action, cbk);
if (onAddCallback){
onAddCallback(el[i]);
}
}
}
return el;
}
} else if (what instanceof HTMLElement){
what.addEventListener(action, cbk);
if (onAddCallback){
onAddCallback(what);
}
return [what]; // вернём просто массив - не NodeList
} else if (what instanceof HTMLCollection){
var length = what.length;
if (length){
for (var i = 0; i < length; i++){
what[i].addEventListener(action, cbk);
if (onAddCallback){
onAddCallback(what[i]);
}
}
} else {
console.log('addListener(): передан пустой NodeList, ничего не назначено');
return what;
}
}
} else {
if (!cbk){
console.log('addListener(): коллбэк не передан');
}
if (!what){
console.log('addListener(): не передан ни селектор, ни элементы');
}
return new Array();
}
}
function addListener(what,cbk,action,deferred,deferred_listener,onAddCallback){what=what||!1,cbk=cbk||!1,action=action||"click",deferred=deferred||!1,deferred_listener=deferred_listener||document.documentElement,onAddCallback=onAddCallback||!1;if(action||(action="click"),!what||!cbk)return cbk||console.log("addListener(): коллбэк не передан"),what||console.log("addListener(): не передан ни селектор, ни элементы"),new Array;if("string"==typeof what){if(!deferred){var el=document.querySelectorAll(what);if(length=el.length)for(var i=0;i<length;i++)el[i].addEventListener(action,cbk),onAddCallback&&onAddCallback(el[i]);return el}"string"==typeof deferred_listener?deferred_listener=document.querySelector("deferred_listener"):deferred_listener instanceof HTMLElement||(deferred_listener=!1),deferred_listener||(deferred_listener=document.documentElement),deferred_listener.addEventListener(action,(function(e){e.target.closest(what)&&cbk(e)}))}else{if(what instanceof HTMLElement)return what.addEventListener(action,cbk),onAddCallback&&onAddCallback(what),[what];if(what instanceof HTMLCollection){var length;if(!(length=what.length))return console.log("addListener(): передан пустой NodeList, ничего не назначено"),what;for(i=0;i<length;i++)what[i].addEventListener(action,cbk),onAddCallback&&onAddCallback(what[i])}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment