2011-02-02 13 views
15

Mi chiedo se è possibile forzare un listener di eventi javascript a, senza che la condizione sia vera forza per eseguirlo una volta, quindi continuare ad ascoltare perché le condizioni siano soddisfatte per essere eseguite ulteriormente?forzare EventListener javascript da eseguire una volta?

+0

"senza che la condizione sia vera" ... quali condizioni? Inoltre, se sparerà una volta, poi continuerà ad ascoltare, quindi presumibilmente sparerà ancora, quindi ... non sparerà una volta. A meno che non intendi voler elaborare solo un evento alla volta (non più eventi simultanei)? – KOGI

+0

Stai usando un framework javascript? Penso che in ExtJS sia possibile. Forse anche in jQuery. – Marc

+0

jQuery ha un metodo .one(), ma non sono sicuro che sia proprio quello che stai cercando. Sebbene, potresti semplicemente re-associare l'evento nel gestore. Ciò avrebbe l'effetto di non gestire gli eventi simultanei, quindi, una volta completato il gestore, iniziare nuovamente ad ascoltare l'evento. http://api.jquery.com/one/ – KOGI

risposta

0

se si avvolge il codice in una funzione, basta chiamare la funzione al caricamento della pagina

modificato per aggiungere ad esempio:

so cosa il vostro evento è, ma ecco un esempio:

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

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

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

se è necessario che la funzione si trovi in ​​un particolare contesto, è possibile utilizzare il metodo jQuery proxy() http://api.jquery.com/jQuery.proxy/ – KOGI

-1

Se comprendo correttamente la tua domanda, vuoi solo gestire un evento alla volta (se un evento si attiva più volte in rapida successione, vuoi solo gestirne uno), una volta completato il gestore, continuerai ad ascoltare più eventi. Corretta?

jQuery ha un .one() metodo api.jquery.com/one

Gestisce solo l'evento una volta, ma se si ri-legano l'evento nel gestore, allora funzionerà come si desidera.

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); 

Questo vi permetterà di sparare il clickFunction una volta, come la magia della chiusura lasciare che il removeEventListener trovare il clickFunction.

Non c'è bisogno di usare una libreria solo per fare qualcosa di semplice.

+0

Questo diventa rapidamente un problema se è necessario utilizzare questo modello più di due volte in un codice. Questo è molto comune nei contesti di animazione css in cui è presente un'animazione "hook transitionend, set change, make transitionend remove itself" e spesso è necessario associarla a catena. Un modello simile a http://hastebin.com/ikixonajuk.coffee è molto più gestibile. In NodeJS è chiamato solo "una volta". – Dmitry

+0

1. nel 2011, quando la risposta era stata originariamente pubblicata, una volta non era disponibile. 2. questa è una domanda di implementazione lato client nella domanda originale, quindi nodejs non è utile 3. lo script del caffè è essenzialmente la stessa idea con una leggera modifica. – Jlam

+1

è una volta disponibile ora nel browser o dobbiamo ancora inventarlo/utilizzare librerie di terze parti gonfie per questo? – Dmitry

Problemi correlati