Ole.: HTML5 input type="number" und onchange

Guten Morgen,

ich experimentiere grade mit HTML5 und den neuen input-typen. Da sind ja wirklich ein paar nette Sachen dabei, allerdings habe ich Probleme mit den Event-Handlern.

Beispiel:

  
<form name="myform" action="">  
<label for="field1">MyLabel</label><input class="base" type="number" id="field1" min="0" max="30" step="1" value="0">  
</form>  

  
$(function() {  
		  
// onChange-Event  
$(".base").change(function() {  
alert('Hier hat sich was geändert!');  
});  
  
});  

Wenn ich nun, mit den vom Formularfeld bereitgestellten Pfeilen den Wert des Formulars ändere, reagiert das via jQuery gesetzte Event (change() oder click()) nicht.

Wie kann ich die Änderungen im Feld richtig abfragen?

Danke & Gruß
Ole

PS: Ich nutze für meine Tests Chrome 7 (stable), 8 (beta) und 9 (dev). Es reicht mir also vollkommen, wenn eine dieser Versionen das Vorhaben unterstützt.

  1. Moin,

    <form name="myform" action="">
    <label for="field1">MyLabel</label><input class="base" type="number" id="field1" min="0" max="30" step="1" value="0">
    </form>

    // onChange-Event
    $(".base").change(function() {
    alert('Hier hat sich was geändert!');
    });

    Wenn ich nun, mit den vom Formularfeld bereitgestellten Pfeilen den Wert des Formulars ändere, reagiert das via jQuery gesetzte Event (change() oder click()) nicht.

    das ist das gleiche Verhalten wie bei einem "herkömmlichen" Eingabefeld - hier feuert onchange auch erst, wenn das Eingabefeld den Focus verliert.

    Wie kann ich die Änderungen im Feld richtig abfragen?

    Sehr gute Frage ...

    So long,
     Martin

    --
    Frauen sind wie Elektrizität: Fasst man sie an, kriegt man eine gewischt.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo Martin,

      das ist das gleiche Verhalten wie bei einem "herkömmlichen" Eingabefeld - hier feuert onchange auch erst, wenn das Eingabefeld den Focus verliert.

      Chrome reagiert auf onchange auch nicht, wenn das input-feld den Fokus verliert. Auch auf onclick reagiert Chrome nur direkt ins input-Feld, nicht jedoch auf die Pfeile.

      Opera (10.63) reagiert sowohl bei onchange als auch bei onclick  wie gewünscht.

      Gruß
      Ole

      1. Hallo,

        das ist das gleiche Verhalten wie bei einem "herkömmlichen" Eingabefeld - hier feuert onchange auch erst, wenn das Eingabefeld den Focus verliert.
        Chrome reagiert auf onchange auch nicht, wenn das input-feld den Fokus verliert. Auch auf onclick reagiert Chrome nur direkt ins input-Feld, nicht jedoch auf die Pfeile.
        Opera (10.63) reagiert sowohl bei onchange als auch bei onclick  wie gewünscht.

        also anscheinend ein spezielles Problem von Chrome?
        Als Notlösung fällt mir da nur ein: Mit setTimeout() eine Überwachungsprozedur einrichten, die in kurzen Abständen, z.B. alle 100ms, den Feldinhalt abfragt und auf Änderungen untersucht, und dann die gewünschte Funktion aufruft.

        Ciao,
         Martin

        --
        Chef:         Zum vierten Mal in dieser Woche erwische ich Sie nun schon beim Zuspätkommen. Was haben Sie dazu zu sagen?
        Angestellter: Dann muss heute Donnerstag sein.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Eleganter dürfte onkeyup sein (da bei onkeydown und onkeypress der geänderte Inhalt nicht immer verfügbar ist). Ohne Tastendruck gibt es normalerweise auch keine Änderung. Optional kannst außerdem onblur verfolgen.

          Gruß, LX

          --
          RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
          1. Hallo,

            Eleganter dürfte onkeyup sein (da bei onkeydown und onkeypress der geänderte Inhalt nicht immer verfügbar ist). Ohne Tastendruck gibt es normalerweise auch keine Änderung.

            möglich, ich habe allerdings *keinen Schimmer*, ob das Anklicken der up/down-Pfeile in einem HTML5-number-Eingabefeld ein onkey*-Ereignis auslöst.

            Optional kannst außerdem onblur verfolgen.

            Aber das wäre ja wieder das meist nicht gewollte Verhalten, dass die Reaktion erst beim "Verlassen" des Feldes erfolgt.

            Ciao,
             Martin

            --
            Ein Theoretiker ist ein Mensch, der praktisch nur denkt.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Aber das wäre ja wieder das meist nicht gewollte Verhalten, dass die Reaktion erst beim "Verlassen" des Feldes erfolgt.

              Das ist aber das Verhalten, wie es bei onchange auch ist.

              Struppi.

            2. Du kannst auch onmouseup zusätzlich noch abfragen.

              Gruß, LX

              --
              RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
  2. Hallo,

    neben change ist der passende Event eher input. Damit gehts auch in Chrome. Opera hingegen feuert beim Klicken der Hoch-Runter-Pfeile auch change.
    In Safari feuert weder change noch input?! Auch nicht beim Verlassen des Feldes. Hat da jemand eine Idee?

    Mathias