Daniel N.: Events: onlick nach onchange zusammenfassen

Hallo,

ich habe folgende Problemstellung:
Ich habe ein "onchange" auf einem Input-Element und ein "onlick" auf einem Button.

Wenn ich nun in dem Input-Feld etwas eingebe und anschließend *direkt* mit der Maus auf den Button klicke, bekomme ich zwei Events: zuerst das onchange-Event des Eingabefelds und danach das onclick-Event vom Button. Also bis hierhin alles wie gewünscht.

Meine Frage lautet nun:
Wie kann ich abfragen, dass auf das onchange-Event unmittelbar das onclick-Event folgt?
Irgendwie gehören diese beiden Events doch in diesem konkreten Beispiel zusammen?

Code-Beispiel:

Javascript

function onButton(e) {  
	console.log('clickEvent');// test, only works in ff/firebug  
}  
  
function onChange(e) {  
	console.log('\nchangeEvent'); // test, only works in ff/firebug  
}

zugehöriges HTML (Ausschnitt)

<input value="Blah" size="30" onchange="onChange(event);" type="text"></input>  
<button onclick="onButton(event);">Knopp</button>

Vielen Dank und viele Grüße
Daniel

  1. @@Daniel N.:

    nuqneH

    ich habe folgende Problemstellung:

    Würdest du auch dein eigentliches Problem schildern, was du damit zu lösen gedenkst?

    Ich habe ein "onchange" auf einem Input-Element und ein "onlick" auf einem Button.

    Ja, ist klar, dass der Input immer mal wieder zu wechseln ist. SCNR.

    Qapla'

    --
    Volumen einer Pizza mit Radius z und Dicke a: pi z z a
    1. Würdest du auch dein eigentliches Problem schildern, was du damit zu lösen gedenkst?

      Ich möchte sowohl beim "onchange" als auch beim "onclick" einen ajax-Request auslösen. Im konkreten Beispiel möchte ich allerdings nur *einen* Request abschicken.

      Meine Vorstellung wäre: Ich möchte den onclick abschicken, der "Klick" löst ja erst das "onchange" aus.

      Kann ich nicht irgendwie im "onchange" prüfen, wodurch das event "eigentlich" ausgelöst wurde?

      Daniel

      1. Kann ich nicht irgendwie im "onchange" prüfen, wodurch das event "eigentlich" ausgelöst wurde?

        Du kannst in allen Events prüfen wodurch das Event ausgelöst wurde, dazu musst du aber das event Objekt übergeben, das kennt dann die Eigenschaft type.

        Aber kann es sein, dass dein Problem ist, dass du nicht prüfst ob ein AJAX Request aktiv ist und du dadurch versuchst zwei davon abzusetzen?

        Struppi.

        1. Du kannst in allen Events prüfen wodurch das Event ausgelöst wurde, dazu musst du aber das event Objekt übergeben, das kennt dann die Eigenschaft type.

          An soetwas in der Art hatte ich gedacht. Allerdings ist type dann in meinem Beispiel:
          "onchange" --> type=change
          "onclick" --> type=click

          Aber kann es sein, dass dein Problem ist, dass du nicht prüfst ob ein AJAX Request aktiv ist und du dadurch versuchst zwei davon abzusetzen?

          Ne, das ist nicht das Problem. Ich versuche gerade zuerst eine "saubere" Lösung mit dem im Ausgangsposting skizzierten Beispiel zu erstellen (mache z.Z. also überhaupt keine requests).

          Da mein letztes Posting offensichtlich etwas missverständlich war, nochmal ein Erklärungsversuch:
          Ich möchte jeweils *einen* Ajax-Request absetzen bei:

          1. "onchange" im Eingabefeld (also auch ohne einen Klick auf den Button)
          2. "onclick" auf den Button - ohne Änderungen im Eingabefeld
          3. "onchange" und "onclick - bei Änderungen im Eingabefeld und direktes Klicken auf den Button

          Daniel

      2. Hallo,

        Ich möchte sowohl beim "onchange" als auch beim "onclick" einen ajax-Request auslösen. Im konkreten Beispiel möchte ich allerdings nur *einen* Request abschicken.

        Du meinst nicht "sowohl als auch", sondern "entweder - oder".

        Dann merke dir doch bei onchange, dass der Request bereits abgesetzt wurde und frage diese Tasache beim onclick auf den Button ab.

        Gruß, Don P

    2. Hallo,

      Ich habe ein "onchange" auf einem Input-Element und ein "onlick" auf einem Button.

      Ja, ist klar, dass der Input immer mal wieder zu wechseln ist. SCNR.

      sollte man wohl tun, wenn man öfter an Buttons leckt.

      *scnr*, 2
       Martin

      --
      Krankenschwester zum fassungslosen Vater von Drillingen: Nein, Sie sollen sich keins aussuchen! Alle drei sind Ihre!
  2. Hi,

    Wie kann ich abfragen, dass auf das onchange-Event unmittelbar das onclick-Event folgt?
    Irgendwie gehören diese beiden Events doch in diesem konkreten Beispiel zusammen?

    Meiner Meinung nach gehören die überhaupt nicht zusammen.

    Ich wüsste auch nicht, wie man das prüfen sollte. Du kannst versuchen, im change die Zeit festzuhalten und im click die vergangene Zeit überprüfen.
    Wenn die Zeitdifferenz gering (oder sogar 0) ist, dann kann man wohl annehmen, dass beide Events auf einander folgten.

    Allerdings solltest du dann eher das Mousedown event auf den Button legen, da onclick erst triggert, wenn der Button released wird.

    Gruß!

    1. Hallo,

      Meiner Meinung nach gehören die überhaupt nicht zusammen.

      Die Events nicht - aber mein Anwendungsfall sieht das so vor! Daher suche ich genau nach einer Lösung, um das "Zusammengehören" feststellen zu können!

      Wenn die Zeitdifferenz gering (oder sogar 0) ist, dann kann man wohl annehmen, dass beide Events auf einander folgten.

      Genau diese Art des Programmierens halte ich für *keine* Lösung, sondern für einen schlechten *Workaround"! Daher meine Frage in diesem Forum ;-)

      Daniel

      1. Hallo,

        Meiner Meinung nach gehören die überhaupt nicht zusammen.
        Die Events nicht - aber mein Anwendungsfall sieht das so vor! Daher suche ich genau nach einer Lösung, um das "Zusammengehören" feststellen zu können!

        Du suchst noch immer? Ich habe dir doch eine Lösung vorgeschlagen. Nicht verstanden?

        Wenn die Zeitdifferenz gering (oder sogar 0) ist, dann kann man wohl annehmen, dass beide Events auf einander folgten.
        Genau diese Art des Programmierens halte ich für *keine* Lösung, sondern für einen schlechten *Workaround"! Daher meine Frage in diesem Forum ;-)

        Ein Workaround, ja – aber sooo schlecht ist das gar nicht. Gerade bei Mouse-Events bleibt einem manchmal keine einfache Alternative. Aber ich würde es dann so machen, dass onchange ein Flag gesetzt und nach kurzem Timeout automatisch wieder zurückgesetzt wird. Sieht der Klick-Event das gesetzte Flag, dann löst er keinen Request aus.

        Gruß, Don P