Der Martin: onmousedown und +=

Beitrag lesen

Hallo,

<input type="Text" name="" value="1" onmousedown="this.value +=2;">
Hier sieht JS das wohl als Verkettung an, aber wie kann ich
das ändern ?

Gunnar hat den wesentlichen Knackpunkt schon erwähnt: this.value ist vom Typ String, also wird der '+' Operator als Stringverkettung angesehen. Sorge also dafür, dass der Ausdruck als Number interpretiert wird. Okay, so elegant-bequem mit dem '+=' Operator geht's dann leider nicht mehr.

Überhaupt wieso Klick (Habe ich mich schon oft gefragt),
ich nutze doch onmousedown. Und da erwarte ich doch,
eine Aktion ausgeführt wird solange ich die Maustaste
festhalte,ähnlich einer manuellen Schleife.

Nein, sondern in dem Moment, da du die Maustaste niederdrückst. Alle Eventhandler orientieren sich ja, wie der Name schon sagt, an einem Event, einem _Ereignis_, nicht einem Zustand. Und beim onmousedown ist das Ereignis das Niederdrücken der Maustaste. Das Gedrückt-Halten wäre ja ein Zustand.

Stattdessen, verhält sich dieser Eventhandler
immer wie onclick. Oder gibts da doch einen Unterschied ?

Ja, mehrere. Erstens zündet onclick AFAIK nicht beim Niederdrücken, sondern beim Loslassen. Zweitens reagiert onclick ersatzweise auch, wenn ein Element, das gewöhnlich mit der Maus bedient wird (Radiobutton, Checkbox), zur Abwechslung per Tastatur ausgelöst wird. Also sind onmousedown bzw. onmouseup zu verwenden, wenn du gezielt *nur* auf die Maus reagieren willst.

onmousedown  = tu was solange ich gedrückt werde.

Das musst du dir selbst bauen. Du könntest als Reaktion auf onmousedown einen Timer starten und per setInterval() zyklisch eine Aktion aufrufen lassen. Bei onmouseup stellst du den Timer mit clearInterval() wieder ab.

Wenn ichs mir doch schon selbst erkläre,
wo ist dann die Frage ?

Das frage ich mich auch. ;-)

Die Frage lautet: Gibt es vielleicht noch irgendeinen undokumentierten Eventkey der meine falsche Vorstellung von onmousedown realisieren kann ?

Nicht dass ich wüsste. Nur Selbermachen wie oben angedeutet.
Übrigens: Du plenkst.

So long,
 Martin

--
Der Gast geht solange zum Tresen, bis er bricht.