2012-09-13 16 views
9

Avendo questo codice di esempio:Jquery. l'evento click non funziona dopo l'evento change?

<input type="text" id="changeid"> 
<a href="#" id="clickb">click</a> 

<script> 
    $('#clickb').on("click", function(event){ 
     alert(1);        
     return false; 
    }); 

    $('#changeid').on("change", function(event){ 
     alert(2);        
     return false; 
    }); 
</script> 

Quando mettere qualcosa nel campo di testo e fare clic sul collegamento immediatamente, solo OnChange generato l'evento, ma non collegare cliccare evento. Perché è quello? Sembra che l'evento change stia bloccando l'evento click?

risposta

4

Quando si modifica l'ingresso e quindi fare clic sul collegamento avviene quanto segue al suo interno

  1. Si inizia cliccando sul 'link'. Non ci sono eventi sono ancora (nemmeno mouseDown) generati, perché prima il browser fare un certo lavoro di pulizia:
  2. L'ingresso non è più attivo e solleverà una blur evento
  3. L'ingresso genera un evento change, dal momento che ha sollevato una blur e il valore è cambiato
  4. tuo change evento di callback si apre un alert(2)
  5. I documenti non è più attivo in quanto una nuova finestra apparsa
  6. il link viene mai sperimentare il click.

La soluzione non deve essere utilizzata alert (come xdazz proposto).

+0

È venuto qui con lo stesso problema, ma diverse precondizioni. Vale la pena notare che la stessa spiegazione è in gioco quando si utilizza un debugger di script per evidenziare la modifica e fare clic sugli eventi – KyleMit

11

È bloccato da alert. Cambia alert a console.log troverai due eventi tutti sparati.

The demo.

$('#clickb').on("click", function(event){ 
    console.log(1); 
    return false; 
}); 

$('#changeid').on("change", function(event){ 
    console.log(2);        
    return false; 
});​ 
+0

+1 per demo funzionante. Ben individuato. – Nope

0

L'evento onchange si attiva solo dopo che l'elemento è sfocato. Quindi quando digiti del testo e fai clic sul link prima l'elemento è sfocato nel campo di testo. Il modo migliore per gestire l'evento change con l'evento onkeyup per tenere traccia delle modifiche apportate sul campo di testo.

1

uso questo

$("#changeid").live('change', function() ... 
Problemi correlati