Warum kann nicht ein mouseup-Ereignis verhindern, dass ein click-Ereignis

jsfiddle

<div class='wrapper'>
    <button class='child'>Click me</button>
</div>

function h(e) {
    e.preventDefault();
    e.stopPropagation();
    e.stopImmediatePropagation();
    alert(e.type);
    return false;
}

document.querySelector('.wrapper').addEventListener('mouseup', h, false);
document.querySelector('.child').addEventListener('click', h, false);

Erwarte ich auch zu verhindern, dass die "click" - Ereignis von brennen, aber es funktioniert nicht. Aber die Veränderung mouseup zu mousedown hat in der Tat verhindern, dass das click-Ereignis.

Ich habe auch versucht die Einstellung der useCapture - argument auf true, und das ebenfalls nicht zu dem erwünschten Verhalten mit mouseup. Ich habe getestet auf Chrome und Firefox. Bevor ich die Datei Fehler, ich dachte, ich würde hier Fragen.

Ist das ein bug in aktuellen Browsern, oder ist es dokumentiert das Verhalten?

Habe ich überprüft, die W3C-standard DOM (level 2), und ich war nicht in der Lage, etwas zu finden, die erklären könnten, dieses Verhalten, aber ich könnte etwas verpasst haben.

In meinem speziellen Fall, ich bin versucht zu entkoppeln, zwei Stücke von code, hören Sie auf Ereignisse, die auf dem gleichen element, und ich dachte, der Verwendung von capture-Ereignisse auf den Teil, der Priorität hat, wäre der eleganteste Weg, um dieses Problem zu lösen, aber dann rannte ich in dieses problem. FWIW, ich habe nur zur Unterstützung der offiziell unterstützten Versionen von FF und Chrome (inklusive ESR für FF).

preventDefault und stopImmediatePropagation sind hier überflüssig (by the way), denn es gibt keine <form> also keine Bestätigung mit der Taste, und nicht mehrere Veranstaltungen des gleichen Typs. Und ich glaubst dies ist das erwartete Verhalten, da nicht mouseup Feuer, bevor click? Also die .child's mouseup Ereignis feuert (und Blasen), bevor Ihre click Ereignis (das Sie aufgehört haben, aber egal)
Ich fügte hinzu, diejenigen, um sicherzustellen, dass ich didn ' T get Kommentare wie "haben Sie versucht, x() und y()?". Für deinen anderen Kommentar, Einstellung useCapture zu wahren Kräfte .wrapper's mouseup geschehen, bevor die Blase vom Kind. Ich habe nicht include diesen code, denn in beiden Fällen, ich sollte nur einmal die alert () - (mit einem anderen Ursprung-element), richtig?
Wenn Sie verhindern möchten, dass ein Mausklick, verwenden Sie diese: jsfiddle.net/zhAHt/9
Das ist nicht alles verhindern. Das ist nur eine Rückkehr, bevor der alert(), die nicht was ich will... wirklich zu nutzen, müsste ich, um eine Globale...

InformationsquelleAutor beatgammit | 2013-08-20

Schreibe einen Kommentar