jsfiddleWarum kann ein mouseup Ereignis ein Click-Ereignis
<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);
ich verhindern erwarten, dass dies das ‚Klick‘ Ereignis von Feuern zu verhindern, aber es funktioniert nicht. Die Änderung von mouseup
zu mousedown
verhindert jedoch das Klickereignis.
Ich habe auch versucht, das useCapture
Argument auf wahr zu setzen, und das erzeugt auch nicht das gewünschte Verhalten mit mouseup
. Ich habe das auf Chrome und Firefox getestet. Bevor ich Bugs einreiche, dachte ich mir, ich würde hier fragen.
Ist dies ein Fehler in aktuellen Browsern, oder ist es dokumentiertes Verhalten?
Ich habe die W3C standard (DOM level 2) überprüft, und ich konnte nichts finden, das dieses Verhalten erklären könnte, aber ich könnte etwas verpasst haben.
In meinem speziellen Fall versuche ich, zwei Codeabschnitte zu entkoppeln, die Ereignisse auf demselben Element anhören, und ich dachte, Capture-Ereignisse auf dem Teil zu verwenden, der Priorität hat, wäre der eleganteste Weg, dies zu lösen, aber dann stieß ich auf dieses Problem. FWIW, ich muss nur offiziell unterstützte Versionen von FF und Chrome unterstützen (einschließlich ESR für FF).
'preventDefault' und' stopImmediatePropagation' sind hier (übrigens) unnötig, weil es keine '
@Ian - Ich habe diese hinzugefügt, um sicher zu gehen, dass ich nicht ' t erhalten Kommentare wie "haben Sie versucht x() oder y()?". Für deinen anderen Kommentar, setze 'useCapture' auf 'true', um '.wrapper's Mouseup vor der Bubble von child zu passieren. Ich habe diesen Code nicht eingefügt, weil ich in beiden Fällen nur einen Alert() (mit einem anderen Ursprungselement) erhalten sollte, oder? – tjameson
Wenn Sie einen Mausklick verhindern möchten, verwenden Sie dies: http://jsfiddle.net/zhAHt/9/ – uSeRnAmEhAhAhAhAhA