Event-Handling-Problem beim Mausklick
NEXON
- javascript
Hallo,
ich versuche ein Problem beim Ausführen des Event-Handlers onmousedown in unterschiedlichen Browsern zu umgehen.
Beim schnellen Nacheinanderklicken soll immer wieder ein Befehl ausgeführt werden und zwar bei jedem Klick. Dazu mal folgender Code:
<html>
<head>
<title>Klick-Test</title>
<script type="text/javascript">
document.onmousedown = click_test;
//document.ondblclick = click_test;
function click_test()
{
document.getElementById('test').innerHTML = parseInt(document.getElementById('test').innerHTML) + 1;
}
</script>
</head>
<body>
<span id="test">0</span>
</body>
</html>
Das ganze zählt bei jedem Maus-Klick die angezeigte Zahl um 1 höher.
Im Firefox 1.5.0.6 und Netscape 7.1 funktioniert das gut, auch beim sehr schnellen klicken. Im Opera 9.00 hab ich schon ne Problemlösung gefunden. Dort funktioniert das ganze, wenn man das ondblclick-Event mit auswertet (Kommentarzeichen im Code entfernen).
Jetzt zu dem, was ich gern hätte:
Zum einen eine Lösung für den IE. Der Befehl soll immer beim Runterdrücken der Maustaste ausgeführt werden, also soll er schon gelaufen sein, wenn man die Taste noch gedrückt hält. Und genau das ging im IE6 nicht (beim schnellen Hintereinander-Drücken).
Zum anderen würde mir eine Lösung ohne Browserweiche am besten gefallen, denn die wäre bis jetzt nötig. Denn der Code der im Opera mit dem kleinen Trick geht, führt den Befehl u.a. im Firefox einmal zu viel aus.
Ich habe auch schon mit dem onfocus-Event experimentiert, doch auch damit ging schnelles klicken u.a. im IE nicht.
Der Code ist natürlich nur ne Abbildung meiner Anwendung, aber vom Prinzip genau mein Problem. Danke schonmal für eure Mithilfe.
Hallo NEXON,
document.getElementById('test').innerHTML = parseInt(document.getElementById('test').innerHTML) + 1;
vieleicht hilft es, wenn Du den Zugriff etwas optimierst:
Globale Variable:
var Zaehler=document.getElementById('test').firstChild;
und im Handler:
Zaehler.data++;
Gruß, Jürgen
Schonmal danke für den Vorschlag Jürgen,
doch leider ist es nicht das, was ich möchte.
Mir gehts nicht um das Zahl-Hochzählen, das soll nur zeigen, dass man mit der Maus geklickt hat. Man kann das nur nachvollziehen, wenn mans selber ausprobiert.
Wenn man den Code, auch in der Form von Jürgen, im IE mal öffnet und dann folgendes macht:
Doppelklick mit der linken Maustaste mit anschließendem Gedrückthalten der Maus (beim 2. Klick), dann soll schon da stehen, dass 2mal gedrückt wurde. Tatsächlich steht da aber nur ne 1 und das soll nicht sein. Also wurde onmousedown nicht 2mal ausgeführt, obwohl man 2mal nach unten gedrückt hat.
Hallo NEXON,
wenn ich das jetzt richtig beobachtet habe, wird im IE beim Doppelklick der onclick bzw. der onmousedown nur einmal ausgelöst, im FF aber zweimal. Ich konnte Dein Problem also nachvollziehen. Nur weiß ich auch nicht, woran es liegt. Du wirst wohl eine Browserweiche benötigen, wenn nicht doch noch einer hier eine Idee hat.
Gruß, Jürgen
Hallo,
ich hab jetzt die Befehlsausführung auf onmouseup gelegt. Das funktioniert in allen Browsern, auch beim schnellen Klicken. Das ist zwar nicht optimal, aber wenigstens ohne Browserweiche möglich.
Auf der Seite http://www.quirksmode.org/js/events_mouse.html gibt es einen "Klicktest". Da sieht man zum Beispiel die Event-Reihenfolge für einen Doppelklick im IE6: mousedown -> mouseup -> click -> mouseup -> dblclick
Wie man sieht wird nur mouseup doppelt ausgeführt. Ich denke mal, dass es da keine bessere Lösung gibt, denn wo kein Event ausgelöst wird, kann auch keine Aktion ausgeführt werden.