¿Cómo puedo combinar estas dos funciones en una sola? Ahora tengo dos funciones que hacen lo mismo: cerrar la ventana de búsqueda en el sitio, presionando escape y presionando fuera de un determinado .
searchOverlay.addEventListener('keydown', function(event){ if(event.key === "Escape"){ body.classList.remove('search-opened'); event.stopPropagation(); } }); searchOverlay.addEventListener('click', function (e) { if (e.target.closest('.search-inner') === null) { body.classList.remove('search-opened'); e.stopPropagation(); } }); }Incluso podría simplemente crear un detector de eventos que admita ambos casos.
function removeSearchOpenedClass(event) { if (event.key === "Escape" || !event.target.closest(".search-inner")) { body.classList.remove('search-opened'); event.stopPropagation(); } } searchOverlay.addEventListener('keydown', removeSearchOpenedClass) searchOverlay.addEventListener('click', removeSearchOpenedClass)Puede declarar una función y llamarla en ambas devoluciones de llamada.
function doStuff(e){ body.classList.remove('search-opened'); e.stopPropagation(); } searchOverlay.addEventListener('keydown', function(event){ if(event.key === "Escape"){ doStuff(event) } }); searchOverlay.addEventListener('click', function (e) { if (e.target.closest('.search-inner') === null) { doStuff(e) } });