2010-08-03 5 views
15

Comment contrôler uniquement le déclenchement d'un événement une fois?Ne déclenchez un événement qu'une seule fois?

En fait, un rapide Google semble faire allusion au fait que .one aide ..

+2

Dès que mon représentant remonte à plus de 3000 je vais c hange "élude" à "allusion" –

+0

Oh mon qui était certainement embarrassant. Merci pour ça. – Qcom

+0

Heureux mon commentaire l'a porté à votre attention –

Répondre

14

Vous pouvez utiliser jQuery de one method, qui souscrira seulement la première occurrence d'un événement.
Par exemple:

$('something').one('click', function(e) { 
    alert('You will only see this once.'); 
}); 
+0

OK, génial, je me demandais juste, quel est le «e» entre vos parenthèses? En outre, cette fonction nécessite-t-elle deux paramètres? 1 pour ce que vous voulez seulement courir une fois, et l'autre pour la fonction? – Qcom

+1

'e' est le paramètre formel de l'événement pour le rappel. Dans ce cas, il est inutilisé. Les deux paramètres sont le type et la fonction de l'événement. –

+0

Génial! C'est vraiment utile, quelle est la différence entre ceci et .bind? Est-ce qu'il n'a pas besoin d'être unbound par quelque chose comme .unbind? – Qcom

20

vanille 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/

Edit: modification inspirée par la version de la lingue et la terminologie de https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

Modifier 23/11/2016:

once vient aux navigateurs. Actuellement Chrome 55, Firefox 50, Safari 10,1

Et vous l'utilisez comme ceci:

document.addEventListener(
    'DOMContentLoaded', 
    improveAllTheThings, 
    {once: true} 
); 

https://www.webreflection.co.uk/blog/2016/04/17/new-dom4-standards

3

Identique à la réponse de rofrol , juste une autre forme:

function addEventListenerOnce(element, event, fn) { 
     var func = function() { 
      element.removeEventListener(event, func); 
      fn(); 
     }; 
     element.addEventListener(event, func); 
    } 
0

De plus, vous pouvez le faire:

window.addEventListener("click", function handleClick(e) { 
    window.removeEventListener("click", handleClick); 

    // ... 
}); 
0

Ajouté les options pour ajouter/supprimer écouteur d'événement:

function addEventListenerOnce(target, type, listener, optionsOrUseCaptureForAdd, optionsOrUseCaptureForRemove) { 
    const f = event => { 
     target.removeEventListener(type, f, optionsOrUseCaptureForRemove); 
     listener(event); 
    } 
    target.addEventListener(type, f, optionsOrUseCaptureForAdd); 
} 
2

Il suffit d'utiliser l'option appropriée dans votre méthode addEventListener appel:

element.addEventListener(event, func, { once: true }) 
+0

Non pris en charge par IE. –

Questions connexes