2012-04-13 8 views
8

Dato il seguente codice HTML:Perché Opera non lancia un evento click quando contrassegni parzialmente il testo?

<div contenteditable="true">Some text</div> 

E alcuni JS che rileva l'evento click con JQuery:

$("div").click(function() { 
    alert('click!'); 
}); 

Se si seleziona una porzione del testo nel div, l'evento click non essere lanciato da Opera (testato con Opera 11.61 su Linux e 11.62 su Windows). Fare doppio clic su una parola per contrassegnarlo parzialmente funziona.

L'evento è generato in IE7-9, Firefox, Chrome e Safari. C'è un JSFiddle here leggermente modificato.

È questo comportamento previsto, un bug di JQuery, un bug di Opera o qualcos'altro?

+2

Questo suona come un bug del browser. Hai provato 'mousedown' o' mouseup' come soluzione alternativa? –

+0

Oh, l'ho fatto ora, e questo funziona come soluzione, grazie! Mi piacerebbe comunque trovare la causa del problema originale. – kvikshaug

+0

Opera lo considera un evento onselect, ma visto che è un div non c'è un evento onselect ?? – Greg

risposta

2

quale comportamento è' corretto 'è sicuramente una domanda interessante. La mia opinione: personalmente penso che il comportamento di Opera abbia più senso, in quanto ciò che l'utente intende fare qui è chiaramente non "fare clic" su qualcosa, ma "selezionare" qualcosa.

D'altra parte, penso anche che Opera dovrebbe cambiarlo per essere compatibile con gli altri browser (a meno che non possiamo ottenere gli altri browser per abbinare Opera). La compatibilità è molto, molto importante. Quindi, parlando con il mio dipendente di Opera su: Penso che siamo corretti, e penso che dovremmo risolvere il problema :-p

+0

Immagino che questo sia ufficiale come si otterrà :) – kvikshaug

2

Gli eventi di clic sono noti per avere un comportamento incoerente tra diversi elementi e diversi browser. Al centro di tutto ciò, un evento click dovrebbe essere attivato quando un singolo elemento registra un mouse seguito da un mouse, vedere jquery doc.

Il miglior consiglio che ho sentito da here:

O se non si tratta di un problema dipende dalla interazione con l'utente che si desidera. Ma generalmente dovresti registrare il tuo script sumousedown/up, a meno che tu non sia completamente sicuro di volere l'evento click e nient'altro.

Così, in accordo con i commenti alla tua domanda, la soluzione più semplice è quella di registrarsi per mouseDown o mouseUp (che uno dipende dal comportamento che si sta cercando, il comportamento più vicino al 'click' sarebbe 'mouseup ')

+0

Mentre sono d'accordo con quello che dici, in realtà non risponde alla domanda sul comportamento di Opera e se è il comportamento previsto, o un bug. A meno che tu non stia dicendo che è intenzionalmente indefinito, nel qual caso dovrai correggermi. – kvikshaug

+0

Hai ragione, non ho una risposta per questo. Rispetto ad un sacco di API di programmazione, ho trovato che la maggior parte degli oggetti di testo e contenitore non ha eventi di clic, che di solito compaiono su elementi interattivi dell'utente come i pulsanti. Quindi, non sorprende che non sia definito nel contenitore div nel tuo esempio. Se volessi davvero sapere, manderei un'email al supporto di Opera o farò un post sui forum di Opera, hanno una comunità davvero buona lì. – Sogger

Problemi correlati