Felix Riesterer: onchange aus anderem fenster "auslösen"?

Liebe Selfer,

ich habe wiederholt beobachten können, dass ein mit onchange besetztes Input-Feld den Eventhandler nicht auslöst, wenn sein Inhalt über ein Script geändert wurde.

Beispiel

HTML
<input type="text" id="wertefeld" value="" onclick="tue_was()" />

Javascript
function aendere_ferngesteuert()
  {
  entsprechendes_fenster.document.getElementById("wertefeld").value = "etwas neues";
  return false;
  }
function tue_was()
  {
  alert("Geändert!!");
  }

In obigem HTML-Dokument wird zwar im Inputfeld "etwas neues" eingetragen, aber die Funktion "tue_was()" wird nicht aufgerufen.

Meine Frage:

Wie kann ich den Eventhandler "onclick" per Script auslösen? Mir ist schon klar, dass ich die Funktion direkt aus meiner anderen Funktion heraus ("aendere_ferngesteuert()") aufrufen könnte, aber wenn selbige in einem anderen Browserfenster ist, dann geht das nimmer.

Mein erster Lösungsansatz:

entsprechendes_fenster.document.getElementById("wertefeld").onChange = true;

Der Eventhandler schlummert brav weiter, das Problem ist weiterhin ungelöst.

Weiß jemand Rat? Freue mich auf frische Ideen.

Liebe Grüße aus Ellwangen,

Felix Riesterer.

  1. Liebe Selfer,

    tja, da lese ich auf der mozilla-Seite:

    Event Handlers
    These element properties cannot be assigned to in the way that the event handlers on the document and window objects can. All of the folllowing event handler properties are read-only, and are made to return the event handling code, if any, that has already been added to the element in the HTML or XML itself.

    Das mit dem read-only scheint meiner Idee den Todesstoß zu geben... Oder kennt jemand eine Eigenschaft, die ich an dem Inputfeld verändern könnte, so dass der Eventhandler doch noch zuschlägt?

    Anderer Ansatz,
    wenn ich den Namen einer Funktion in einem anderen Fenster kenne, könnte ich sie dann dort aufrufen (lassen)? Das wäre dann meine einzige Möglichkeit.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Hallo,

      Anderer Ansatz,
      wenn ich den Namen einer Funktion in einem anderen Fenster kenne, könnte ich sie dann dort aufrufen (lassen)? Das wäre dann meine einzige Möglichkeit.

      Normalerweise schon:

      referenzZuFenster.funktion();

      Wenn das nicht geht, dann stellt die "referenzZuFenster" ein HTML-Dokument aus einer andern Domain dar als das aufrufende Fenster und dann _soll_ es nicht gehen, weil es böse wäre wenn es ginge.

      viele Grüße

      Axel

      1. Lieber Axel,

        referenzZuFenster.funktion();

        DAS war der entscheidende Tipp! Wunderbar! Genau jetzt klappt das, was ich will so, wie ich es will!

        Tausend Dank! :-)

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

  2. Hallo Felix,

    <input type="text" id="wertefeld" value="" onclick="tue_was()" />

      
    
    > function aendere_ferngesteuert()  
    >   {  
    
         if(entsprechendes_fenster.document.getElementById("wertefeld").value!="etwas neues")  
             tue_was();  
      
         entsprechendes_fenster.document.getElementById("wertefeld").value="etwas neues"  
      
    
    >   return false;  
    >   }  
    > function tue_was()  
    >   {  
    >   alert("Geändert!!");  
    >   }  
    
    

    Durch die Abfrage mit if() wird der Event onClick immer noch nicht ausgelöst, aber das ist auch nicht notwendig ;)

    Gruß aus Berlin!
    eddi

    1. Lieber eddi,

      Danke für Deine Antwort!

      Dein Codebeispiel erscheint mir für meine Zwecke unsinnig, da es lediglich vor dem Ändern des eventuell vorhandenen Inhalts prüft, ob der einzutragende Inhalt nicht schon enthalten ist. Mir ist das eigentlich schnuppe, denn ich will, dass der Event _tatsächlich_ ausgelöst wird!

      Durch die Abfrage mit if() wird der Event onClick immer noch nicht ausgelöst, aber das ist auch nicht notwendig ;)

      Ich wollte den Event onCHANGE, nicht onClick. Ausserdem soll ja gerade die Funktion des Handlers ausgelöst werden! Das war ja mein ganzes Bestreben!

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.