Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Předání hodnoty inputu do nově otevřeného okna

Mám okno, ve kterém je formulář, obsahující textové pole. Potřebuju, aby se po kliknutí na tlačítko v tomto okně otevřelo nové okno, rovněž obsahující formulář, do něhož potřebuju přenést hodnotu z pole v 1. okně. Potřebuju, aby to fungovalo min. v IE 6+, FF 3, Google Chrome.

Můj demo zjenodušený pokus
index.html (1. okno z něhož přenáším hodnotu):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <meta http-equiv="content-type" content="text/html; charset=windows-1250">
     <script src="pokus.js"></script>
  </head>
  <body>
    <form name="LANSA" method="post">
      <input type="text" id="text" value="0123456789" /><br /><br />
      <input type="button" id="butt_text" value="Přenes data" onclick="javascript: okno();" />
    </form>
  </body>
</html>

okno.html (2. okno, do kterého přenáším hodnotu):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=windows-1250">
    <script src="pokus.js"></script>
  </head>
  <body>
    <form name="LANSA" method="post">
      <input type="text" id="text1" />
      <input type="text" id="text2" />
    </form>
  </body>
</html>

pokus.js

function okno() {
  var win = window.open("./okno.html", "", "");
  win.addEventListener("load", prenesData(win, document), false);
}

function prenesData(win, doc) {
  win.document.getElementById("text1").value = "ahoj"; 
  win.document.getElementById("text2").value = doc.getElementById("text").value;
}

V prvním řádku fce prenesData natvrdo přiřadím nějakou hodnotu prvnímu inputu - kontrola, že volání inputů v nově otevřeném okně je v pořádku. Ve druhém řádku pak přiřadím hodnotu z prvního okna.

Jenže:
1. Toto funguje v IE, Ve FF ani GCH se hodnoty nepředají (a to ani ta, co přiřazuji natvrdo). FF vypíše win.document.getElementById("text1").is null;
2. Přidám na začátek fce prenesData příkaz alert("prenesData()"); Nyní se hodnoty v IE 6 a FF vyplní, v GCh stále ne.
3. Zakomentuji alert a místo něj dám while, který by měl čekat, dokud se inputy nevytvoří:
while (win.document.getElementById("text2") == null) {
var a = 1;
}
V IE 6 funguje, v FF a Gch se věčně zacyklí.

Nemáte tip, jak to napsat, aby to fungovalo všude?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak jsem se nakonec dopracovala k tomuhle kódu: function okno() { var win = window.open("./okno.htm… poslední
Anicka 28.07.2009 12:18
Anicka

Tak jsem se nakonec dopracovala k tomuhle kódu:

function okno() {
  var win = window.open("./okno.html", "", "");

  if (win.addEventListener) {
    win.addEventListener("load", prenesData(win), false);
  }
  else
    if (win.attachEvent) {
      win.attachEvent("load", prenesData(win));
    }
}

function prenesData(win) {
  alert("prenesData()");

  win.document.getElementById("text1").value = "baf";
  win.document.getElementById("text2").value = 
    win.opener.document.getElementById("text").value;
}

Tohle funguje v IE i ve FF a Opeře. V Google Chrome ne. Bohužel jen do okamžiku, než zakomentuji alert v prenesData(). Pak to funguje jen v IE, ale v ostatních se data nepředávají. Nemáte nějaký nápad, jak to udělat bez alertu?

Zpět do poradny Odpovědět na původní otázku Nahoru