
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?
Možná teď plácnu něco mimo, ale proč hodnoty nepřeneseš přes GET/POST nebo pomocí session?
Protože to by se pak muselo napsat cosi na serveru v LANSE (nejspíš vytvořit nový proces...), což já neumím a ten, kdo to umí na to nemá čas. Přece musí být způsob jak jednoduše předat z jednoho okna pomocí js data do druhého tak, aby to fungovalo ve všech prohlížečích, ne?
Session taky ne - běží to na lansáckém serveru, který má nějaké svoje session, ale moc s nimi tady nikdo pracovat neumí a k předávání dat se proto u nás nepoužívají.
Musíš to urobiť na opak. Z otvoreného okna načítať údaje z jeho vlastníka.
Problém je v tom, že já do nově otevřeného okna nemůžu napsat
, protože to okno je generováno LANSOU a tag body je generován automaticky. Proto je ve fci, která okno otevírá příkaz:
fci prenesData jsem upravila takhle:
Testovací alert se provede, ale data se nepřenesou. A na rozdíl od předchozího zápisu, kdy se document předával jako parametr fce to teď nefunguje ani v IE natož v tom ostatním. Konkrétně ve FF se zobrazí chybová zpráva document.getElementById("text1") is null;
Tak jsem se nakonec dopracovala k tomuhle kódu:
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?