¿Cómo controlo solo disparar un evento una vez?¿Solo disparar un evento una vez?
En realidad, una rápida de Google parece aludir al hecho de que .one ayuda ..
¿Cómo controlo solo disparar un evento una vez?¿Solo disparar un evento una vez?
En realidad, una rápida de Google parece aludir al hecho de que .one ayuda ..
Puede usar jQuery de one
method, que suscribirá sólo a la primera ocurrencia de un evento.
Por ejemplo:
$('something').one('click', function(e) {
alert('You will only see this once.');
});
OK, increíble, solo me pregunto, ¿cuál es la 'e' entre tus paréntesis? Además, ¿esta función requiere dos parámetros? 1 por lo que desea ejecutar solo una vez, y el otro por la función? – Qcom
'e' es el parámetro formal del evento para la devolución de llamada. En este caso, no está siendo utilizado. Los dos parámetros son el tipo de evento y la función. –
¡Impresionante! Eso es realmente útil, ¿cuál es la diferencia entre esto y .bind? ¿Es que no necesita ser desatado por algo como .unbind? – Qcom
vainilla js
function addEventListenerOnce(target, type, listener) {
target.addEventListener(type, function fn(event) {
target.removeEventListener(type, fn);
listener(event);
});
}
addEventListenerOnce(document.getElementById("myelement"), "click", function (event) {
alert("You'll only see this once!");
});
http://www.sitepoint.com/create-one-time-events-javascript/
Editar: modificación inspirado en la versión y la terminología de ling de https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
Editar 11.23.2016:
once
viene a los navegadores. Actualmente en Chrome 55, Firefox 50, Safari 10,1
Y lo usa así:
document.addEventListener(
'DOMContentLoaded',
improveAllTheThings,
{once: true}
);
https://www.webreflection.co.uk/blog/2016/04/17/new-dom4-standards
Igual que la respuesta de rofrol , solo otra forma:
function addEventListenerOnce(element, event, fn) {
var func = function() {
element.removeEventListener(event, func);
fn();
};
element.addEventListener(event, func);
}
Además, se puede hacer esto:
window.addEventListener("click", function handleClick(e) {
window.removeEventListener("click", handleClick);
// ...
});
añadido las opciones para añadir/eliminar el detector de eventos:
function addEventListenerOnce(target, type, listener, optionsOrUseCaptureForAdd, optionsOrUseCaptureForRemove) {
const f = event => {
target.removeEventListener(type, f, optionsOrUseCaptureForRemove);
listener(event);
}
target.addEventListener(type, f, optionsOrUseCaptureForAdd);
}
sólo tiene que utilizar la opción adecuada en su llamada al método addEventListener:
element.addEventListener(event, func, { once: true })
No es compatible con IE. –
Tan pronto como mi representante regrese a más de 3000 voy a c Hange "elude" para "aludir" –
Oh, eso fue ciertamente embarazoso. Gracias por eso. – Qcom
Me alegro de que mi comentario lo haya llamado tu atención –