2012-04-13 1 views
8

den folgenden HTML Gegeben:Wieso wirft Opera kein Click-Event, wenn Sie Text teilweise markieren?

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

und einige JS, die das Click-Ereignis mit JQuery erkennt:

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

Wenn Sie einen Teil des Textes in den div wählen, wird das Click-Ereignis nicht von Opera geworfen werden (getestet mit Opera 11.61 unter Linux und 11.62 unter Windows). Doppelklicken Sie auf ein Wort, um es teilweise zu markieren funktioniert arbeiten.

Das Ereignis ist in IE7-9, Firefox, Chrome und Safari geworfen. Es gibt eine leicht modifizierte JSFiddle here.

Ist das erwartete Verhalten, ein JQuery-Fehler, ein Opera-Fehler oder etwas anderes?

+2

Das klingt wie ein Browser-Bug. Hast du "mousedown" oder "mouseup" als Workaround probiert? –

+0

Oh, habe ich jetzt, und das funktioniert als Workaround, danke! Ich möchte jedoch immer noch die Ursache für das ursprüngliche Problem finden. – kvikshaug

+0

Behandelt Opera es als onselect Event, aber da es ein div ist, gibt es kein onselect Event? – Greg

Antwort

2

welches Verhalten ist "richtig" ist sicherlich eine interessante Frage. Meine Meinung dazu: Ich persönlich halte das Verhalten von Opera für sinnvoller, da das, was der Benutzer hier beabsichtigt, klar ist, nicht auf etwas zu "klicken", sondern etwas "auszuwählen".

Auf der anderen Seite denke ich auch, Opera sollte es ändern, um mit den anderen Browsern kompatibel zu sein (es sei denn, wir können die anderen Browser Opera entsprechen). Kompatibilität ist sehr, sehr wichtig. Also, mit meinem Opera Mitarbeiter Hut auf: Ich denke, wir sind richtig, und ich denke, wir sollten das beheben: -p

+0

Ich denke, das ist so offiziell wie es wird :) – kvikshaug

2

Es ist bekannt, dass Klickereignisse zwischen verschiedenen Elementen und verschiedenen Browsern inkonsistent sind. Im Kern soll ein Klick-Ereignis ausgelöst werden, wenn ein einzelnes Element einen Maus-Down gefolgt von einem Mouse-Up aufzeichnet, siehe .

Der beste Rat, den ich gehört habe, ist von here:

Ob dies ein Problem, hängt von dem Sie Benutzer-Interaktion ist mögen. Normalerweise sollten Sie Ihr Skript jedoch auf "mousedown/up" registrieren, es sei denn, Sie sind sich absolut sicher, dass Sie das click -Ereignis und nichts anderes möchten.

Also, im Einvernehmen mit den Kommentaren zu Ihrer Frage, die einfachste Lösung ist zu registrieren, um MouseDown- oder mouseup (die man auf dem Verhalten abhängt, die Sie suchen, die am nächsten Verhalten ‚Klick‘ wäre ‚mouseup ')

+0

Obwohl ich dem zustimme, was du sagst, beantwortet es nicht wirklich die Frage nach Operas Verhalten und ob es das beabsichtigte Verhalten oder ein Fehler ist. Wenn du nicht sagst, dass es absichtlich nicht definiert ist, musst du mich korrigieren. – kvikshaug

+0

Sie haben Recht, ich habe keine Antwort dafür. Im Vergleich zu vielen Programmier-APIs habe ich festgestellt, dass die meisten Text- und Containerobjekte keine Klickereignisse haben, die normalerweise auf benutzerinteraktiven Elementen wie Schaltflächen erscheinen. Es ist also nicht verwunderlich, dass es im div-Container in Ihrem Beispiel nicht definiert ist. Wenn du es wirklich wissen wolltest, würde ich den Opera-Support per E-Mail schicken oder einen Post in den Opera-Foren schreiben, sie haben dort eine wirklich gute Community. – Sogger

Verwandte Themen