small-step: Problem beim ermitteln eines Tastendrucks

Hallo alle,

ich habe ein kleines Problem mit dem von mir über alle Maßen geliebten JavaScript. Wer gerade über Ironie gestolpert ist besitzt mein Beileid.

Ich möchte einen Tastendruck abfangen, allerdings nur in einem Input-Element. Ich rufe dazu über onKeyUp eine funktion auf und übergebe ihr den Wert der Textbox und seine ID. In Opera oder dem IE funktioniert das ganze, weil ich das Ereignis über window.event abfangen kann. Ich weiß aber nicht wie ich Mozilla das Ereignis übergeben soll. Ich finde nur Beispiele zum Abfangen des Tastendrucks in denen das ganze Dokument überwacht wird und keine weiteren Werte übergeben werden. Da ich aber mehrere dieser Textboxen im Quelltext haben kann muss ich den Eventhandler direkt über die jeweilige Textbox feuern. Weiß jemand wie ich dieses Problem lösen kann?

Der Aufruf der Funktion lautet folgendermaßen:
<input name="test" type="text" id="test" maxlength="100" onKeyUp="auswertung(this.value, this.id)" />

Die überprüfung wie in so ziemlich allen Lösungsvorschlägen angegeben:
if(!Ereignis)
 Ereignis = window.event;
if (Ereignis.which)
 Tastencode = Ereignis.which;
else if (Ereignis.keyCode)
 Tastencode = Ereignis.keyCode;

Ereignis wird jetzt aber von Mozilla als 'undefined' bemängelt. Klar, ich übergebe es ja auch nicht...

Danke schonmal für die Hilfe!
small-step

  1. Mahlzeit.

    if(!window.captureEvent)
    {

    if(!Ereignis)
    Ereignis = window.event;
    if (Ereignis.which)
    Tastencode = Ereignis.which;
    else if (Ereignis.keyCode)
    Tastencode = Ereignis.keyCode;

    }
    else
    {
     if(!Ereignis)
      Ereignis=window.captureEvent;
     usw ...
    }

    MFG
    Griever

    --
    LOOK MY PAGE!
    1. Hallo griever,

      if(!window.captureEvent)

      Ich dachte captureEvent wäre nur für Netscape 4 relevant?

      Wie auch immer, es funktioniert leider nicht. Mozilla scheint captureEvent genau wie der IE nicht zu beachten.

      Gruß,
      small-step

  2. Hi,

    Ich finde nur Beispiele zum Abfangen des Tastendrucks in denen das ganze Dokument überwacht wird

    Kein Problem. Denn Du kannst ja mittels onblur bzw. onfocus feststellen ...

    Da ich aber mehrere dieser Textboxen im Quelltext haben kann

    ... auf welcher Box sich der Fokus befindet. Ist es die gewünschte, wird überwacht, verliert diese Box den Fokus, halt nicht.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hallo Cybaer,

      Kein Problem. Denn Du kannst ja mittels onblur bzw. onfocus feststellen ...

      Leider schon, ich schreibe ein Custom Control für ein ASP.Net Projekt. Das ist wirklich nur eine abgeleitete Textbox mit etwas JS und Html dran. Ich hab leider keinen Zugriff auf die Seiten in denen das Control zum Einsatz kommt.

      Gruß,
      small-step

      1. Hi,

        Leider schon, ich schreibe ein Custom Control für ein ASP.Net Projekt.

        Wenn Du eine Routine zur Key-Überwachung reinbauen kannst, dann kannst Du auch eine Routine zur Fokus-Überwachung einbauen.

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hallo Cybaer,

          Wenn Du eine Routine zur Key-Überwachung reinbauen kannst, dann kannst Du auch eine Routine zur Fokus-Überwachung einbauen.

          Wenn ja bin ich einfach nicht fit genug in JavaScript um darauf zu kommen wie es funkionieren könnte.

          Gruß,
          small-step

          1. Hi,

            Wenn ja bin ich einfach nicht fit genug in JavaScript um darauf zu kommen wie es funkionieren könnte.

            Du hast z.B. mit getElementyByTagName() Zugriff auf alle INPUTs oder mit getElementByName() auf Elemente mit bestimmten Namen.

            document.getElementByName("observe")[0].onfocus=observe;

            setzt einen Eventhandler beim (1.) Element mit dem Namen "observe" (<input name="observe"...>). Abgearbeitet wird dabei die Funktion observe(). Also

            function observe() {
             getKeyEventFlag=true;
            }

            Und im Keyevent kannst Du jetzt z.B. abfragen, ob getKeyEvent TRUE ist.

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Du hast z.B. mit getElementyByTagName() Zugriff auf alle INPUTs oder mit getElementByName()

              Ähm, Plural natürlich! getElementsBy... =;-)

              Gruß, Cybaer

              --
              Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
              1. Hallo Cybaer,

                Ähm, Plural natürlich! getElementsBy... =;-)

                Klar. Ich werd das nachher mal versuchen. Für's erste soll mir Mozilla egal sein, das wird sowieso eine Intranet-Anwendung lediglich für den IE. Und wenn ich noch mehr Zeit in Mozillatauglichkeit stecke, killt mich mein Chef :-)

                Danke für die Hilfe!
                small-step

  3. Hallo small-step

    if(!Ereignis)
      Ereignis = window.event;Hilfe!

    if (typeof Ereignis == 'undefined')

    sollte dein Problem lösen.

    HTH

    Jochen

    --
    Heute schon gescribbelt?
    Scribbleboard
    1. Hallo Maxx,

      if (typeof Ereignis == 'undefined')
      sollte dein Problem lösen.

      Leider nein. Es macht nur den Quelltext schöner. Dadurch wird ja an der Tatsache, dass 'Ereignis' undefiniert ist, nichts geändert.

      Gruß,
      small-step

      1. Hallo,

        sorry. Dann habe ich dein Problem nicht richtig verstanden.
        Kannst du es vielleicht noch einmal im Zusammenhang erläutern? Oder ein Beispiel online stellen?

        Der Zusammenhang zwischen <input onKeyUp="auswertung(this.value, this.id)" /> und
        window.event ist mir unklar. Wozu benötigst onKeyUp() UND window.event?

        Grüße,

        Jochen

        --
        Heute schon gescribbelt?
        Scribbleboard
        1. Der Zusammenhang zwischen <input onKeyUp="auswertung(this.value, this.id)" /> und
          window.event ist mir unklar. Wozu benötigst onKeyUp() UND window.event?

          Evtl. um die Mausposition zu ermitteln aber warum er den Wert und die ID des Elementes übergibt ist mir nicht klar.

          Struppi.

        2. Hallo Maxx,

          sorry. Dann habe ich dein Problem nicht richtig verstanden.
          Kannst du es vielleicht noch einmal im Zusammenhang erläutern? Oder ein Beispiel online stellen?

          Ein Beispiel kann ich leider nicht online stellen. Ich versuche es nochmal zu erklären.

          Der Zusammenhang zwischen <input onKeyUp="auswertung(this.value, this.id)" /> und
          window.event ist mir unklar. Wozu benötigst onKeyUp() UND window.event?

          onKeyUp bedeutet ja nur, dass die gedrückte Taste wieder losgelassen wurde. Übertragen wird jetzt der Wert um den String mit anderen zu vergleichen und die ID um rauszufinden welches Element für eine Rückgabe adressiert werden muss.

          Welche Taste zuletzt gedrückt wurde muss ich wissen weil ich die Pfeiltasten auswerten möchte um in der Liste der passenden Strings zu navigieren.

          Gruß,
          small-step

  4. Der Aufruf der Funktion lautet folgendermaßen:
    <input name="test" type="text" id="test" maxlength="100" onKeyUp="auswertung(this.value, this.id)" />

    wenn du unbedingt inline den Event brauchst, musst du noch den Event als Parameter übergeben:

    <input name="test" type="text" id="test" maxlength="100" onKeyUp="auswertung(Event, this.value, this.id)" />

    Die überprüfung wie in so ziemlich allen Lösungsvorschlägen angegeben:
    if(!Ereignis)
    Ereignis = window.event;
    if (Ereignis.which)

    Naja umständlich.

    Der Punkt ist, Mozilla Brower übergeben den Event als Parameter, wenn du diese im Akriptblock definierst:

    [obj].onclick = Funktion;

    Jetzt bekommt Funktion(e) das Event Objekt automatisch als Parameter.

    Tastencode = Ereignis.which;
    else if (Ereignis.keyCode)
    Tastencode = Ereignis.keyCode;

    sowas ermittlest du einfacher:

    var Tastencode = Ereignis.which || Ereignis.keyCode;

    Struppi.

    1. Hallo Struppi,

      wenn du unbedingt inline den Event brauchst, musst du noch den Event als Parameter übergeben:
      <input name="test" type="text" id="test" maxlength="100" onKeyUp="auswertung(Event, this.value, this.id)" />

      Ich hasse JavaScript :-)

      Jetzt funktioniert es auf Mozilla, der IE mäkelt aber 'Event' im Link an...

      Gruß,
      small-step

      1. Jetzt funktioniert es auf Mozilla, der IE mäkelt aber 'Event' im Link an...

        Probier mal 'event'

        Ich benutzt keine HTML Events. daher bin ich nicht sicher.

        Struppi.