2011-04-07 13 views
33

Mi stavo guardando in giro per aggiungere un evento a una casella di controllo e avrei pensato che la gente avrebbe usato .change per impostare un evento di modifica ma invece ho scoperto che le persone stanno usando .clickChe differenza tra .click e .change su una casella di controllo

C'è una ragione per questo? Entrambi sembrano funzionare bene sia con eventi cliccati che con modifiche alla tastiera. Mi sto perdendo qualcosa?

Se non mi credete, allora try it out yourself

+0

interessante osservazione! – mcgrailm

risposta

33

onchange in IE solo incendi quando la casella di controllo perde lo stato attivo. Quindi, se si attiva una scheda, colpisci spazio alcune volte, a schede, riceverai solo un evento onchange, ma diversi eventi onclick.

Nota: questo è uno dei tempi molto, molto, molto rari in cui il comportamento di IE è corretto (secondo le specifiche) e altri browser sono errati.

+0

anche interessante non sapevo che fai clic su cose come quella – mcgrailm

+0

in realtà funziona anche per i clic. Se fai clic due volte sulla casella di controllo e poi fai clic su un'altra posizione, non otterrai un evento 'onchange' (facendo clic due volte per tornare al suo valore iniziale), ma otterrai due eventi' onclick'. –

+0

Vale la pena notare che onchange si attiva solo quando lo stato attivo cambia nei campi di testo - non ero consapevole del fatto che il comportamento era diverso per le caselle di controllo, ma suppongo che sia perché il loro focus non è ben definito. – crazy2be

0

.change non funziona correttamente per almeno alcuni browser popolari in relazione alle modifiche dei tasti (l'utente che seleziona l'opzione con i tasti freccia su/giù), ma poi .click non lo supera. A volte l'uso di keyup o keydown o qualcosa è usato in congiunzione con .change per superare questo problema, tuttavia inizia a diventare un po 'disordinato quando la scheda dell'utente del documento in quanto può attivare l'evento chiave se non è gestito esplicitamente all'interno del callback. Tutto sommato è un peccato che .change non funzioni come ci si aspetterebbe in quanto risolverebbe alcuni problemi che richiedono tempo.

0

sì, entrambi funzionano, solo il clic non osserva il cambio dell'oggetto reale (come una casella di controllo che viene controllata), il cambiamento lo fa.

Tecnicamente è più affidabile ma in pratica funzionano entrambi.

0

Possono entrambi attivare una modifica del valore per impostazione predefinita, ma è possibile ignorare la logica onClick per NON modificare il valore di un chackbox. È possibile modificare il valore tramite un altro punto di ingresso. Quindi è necessario avere un .click e un .change.

modifica - anche io sono d'accordo con il dottor Rob

6

Due motivi per cui onclick è preferito rispetto onchange.

  1. Internet Explorer attiva l'evento onchange solo quando la casella di controllo perde lo stato attivo (onblur). Quindi onclick è più di una soluzione cross browser.

  2. onchange si verifica solo dopo che l'elemento ha perso la messa a fuoco. Lo pseudo codice su MDC praticamente spiega l'implementazione di element.onchange.

    control.onfocus = focus; 
    control.onblur = blur; 
    
    function focus() { 
        original_value = control.value; 
    } 
    
    function blur() { 
        if (control.value != original_value) 
         control.onchange(); 
    } 
    
+0

FYI, tutti i browser tranne IE (beh FF, Chrome, Safari comunque) si accendono immediatamente sulle caselle di controllo. –

+0

@cwolves: lo so. ma il 56% degli utenti utilizzano ancora IE :) http://en.wikipedia.org/wiki/Usage_share_of_web_browsers – naveen

+0

Il link dice il 45% medio :) –

Problemi correlati