Last active
December 2, 2022 14:48
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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