2011-02-02 13 views
15

Zastanawiam się, czy możliwe jest wymuszenie detektora zdarzeń javascript, bez warunku, który jest prawdziwy, zmusić go do wykonania raz, a następnie kontynuować słuchanie, aby warunek został spełniony, aby wykonać dalej?wymusić wykonanie obiektu javascript EventListener raz?

+0

"bez warunku będącego prawdą" ... jaki stan? Jeśli raz wystrzeli, to posłuchaj dalej, a potem prawdopodobnie strzelaj ponownie, a potem ... nie strzela raz. Chyba że masz na myśli, że chcesz przetwarzać tylko 1 wydarzenie na raz (nie wiele jednoczesnych wydarzeń)? – KOGI

+0

Czy korzystasz z architektury javascript? Myślę, że w ExtJS jest to możliwe. W jQuery może też. – Marc

+0

jQuery ma metodę .one(), ale nie jestem pewien, czy jest to dokładnie to, czego szukasz. Chociaż można po prostu ponownie powiązać zdarzenie w module obsługi. To spowoduje brak obsługi zdarzeń symultanicznych, a następnie po zakończeniu obsługi, zacznij ponownie słuchać zdarzenia. http://api.jquery.com/one/ – KOGI

Odpowiedz

0

jeśli owinąć kod w funkcji, po prostu wywołanie funkcji na stronie obciążenia

edytowane dodać przykład:

wiem co to wydarzenie jest ale oto przykład:

<a ..onclick='someFunction()'>click</a> 

<script type='text/javascript'> 
function someFunction() { 
    // do whatever 
} 

// call the function 
someFunction(); 
</script> 
+0

jeśli potrzebujesz funkcji do określonego kontekstu, możesz użyć metody proxy (jQuery) http://api.jquery.com/jQuery.proxy/ – KOGI

-1

Jeśli dobrze rozumiem twoje pytanie, chcesz zająć się tylko jednym wydarzeniem naraz (jeśli zdarzenie jest uruchamiane wielokrotnie w krótkim odstępie czasu, chcesz obsłużyć tylko jedno z nich), to po zakończeniu obsługi będziesz nadal słuchać więcej wydarzeń. Poprawny?

jQuery ma metoda A .one() api.jquery.com/one

Zajmuje tylko zdarzenie raz, ale jeśli ponownie powiązać zdarzenie w uchwycie, to będzie działać jak chcesz.

function handler() 
{ 
    // do stuff 

    $(this).one('click', handler); 
} 

$('.someElement').one('click', handler); 
34
var clickFunction = function (event) { 
    //do some stuff here 
    window.removeEventListener('click',clickFunction, false); 

}; 
window.addEventListener("click", clickFunction, false); 

To pozwoli Ci ogień clickFunction raz, jak magia zamknięcia niech removeEventListener znaleźć clickFunction.

Nie trzeba używać biblioteki, aby uzyskać proste czynności.

+0

To szybko staje się problemem, jeśli musisz użyć tego wzoru więcej niż dwa razy w jednym kodzie. Jest to bardzo częste w kontekstach animacji css, gdzie masz animację "przejście haseł, ustaw zmianę, spraw, aby przejście było usuwane" i często musisz ją łańcuchować. Wzór podobny do http://hastebin.com/ikixonajuk.coffee jest o wiele łatwiejszy w utrzymaniu. W NodeJS jest to po prostu "raz". – Dmitry

+0

1. W 2011 r., Kiedy odpowiedź została pierwotnie opublikowana, raz była niedostępna. 2. To pytanie implementacyjne po stronie klienta w oryginalnym pytaniu, więc nodejs nie jest pomocne 3. Twój skrypt do kawy jest zasadniczo tym samym pomysłem z niewielkimi modyfikacjami. – Jlam

+1

jest już dostępny w przeglądarce lub czy wciąż musimy go wymyślić/użyć do tego celu rozbudowanych bibliotek zewnętrznych? – Dmitry

Powiązane problemy