Autor Zpráva
manganistan_draselny
Profil *
Dobrý den. Pro systém chatu na svých stránkách (bohužel ještě nejsou vystaveny) používám php+javascriptový systém.
Pro obnovení chatových zpráv používám Javascript, aby nebylo pro pravidelné obnovování zpráv potřeba reloadovat celou stránku. Dotyčný javascript vypadá takto (formulář odkazuje na iframe):

function obnovit_chatzpravy(){
document.getElementById('chat_zpravy').innerHTML = "<form id='mazani_zprav_formular' action='chat.php?akce=smazat_zpravy' target='chatovy_iframe' method='post'>";
document.getElementById('chat_zpravy').innerHTML += "<input type='submit' value='smazat vybrané'><br>";
document.getElementById('chat_zpravy').innerHTML += "<span id='odkaz' onclick=" + String.fromCharCode(34) + "document.getElementById('mazani_zprav_formular').submit();" + String.fromCharCode(34) + ">Odstranit vybrané zprávy</span><br>";
for(n = 1;n <= pocetchatzprav;n++){
document.getElementById('chat_zpravy').innerHTML += "<div style='float : right;'><i>" + chatzpravy[n].cas + "&nbsp;</i></div>";
document.getElementById('chat_zpravy').innerHTML += "<div><b><input type='checkbox' name='smazat_zpravu_" + chatzpravy[n].idzpravy + "' value='1'>" + chatzpravy[n].uzivatel + "</b></div>";
document.getElementById('chat_zpravy').innerHTML += "<div style='font-size : 0.9em; text-align : left;'>" + chatzpravy[n].textzpravy + "</div><hr>";
}
document.getElementById('chat_zpravy').innerHTML += "</form>";
}


Jak vidíte, k odesílání je použitou dvou způsobů - jednak elementu <input type='submit'> a také elementem <span> který přes onclick spouští odeslání.
Oba způsoby spolehlivě fungují pod Operou, ovšem ve Firefoxu a MSIE odeslání přes <span> neodešle žádná POSTdata (serverový skript ohlásí, že není vybrána žádná zpráva i přesto že jsou vybrané) a odeslání přes <input type='submit'> dokonce vůbec neproběhne...

Může být na vině systém generování tohoto formuláře? Jak to, že v Opeře fungují korektně obě (input i span) metody odeslání?
Str4wberry
Profil
manganistan_draselny
A nešlo by se bez toho spanu obejít?
manganistan_draselny
Profil *
Jistě. Pokud ten span zakomentuji nebo jej ze skriptu zcela vypustím, zůstane mi obyčejný formulář odesílaný tlačítkem. Ten se ale chová zcela stejně - v Opeře korektně odešle formulář, ve Firefoxu či MSIE prostě neudělá nic... A není to problém serverového skriptu, požadavek od prohlížeče prostě neodejde (to jsem ověřil nejen diagnostikou na straně serveru, ale také snifferem :-(( )...
manganistan_draselny
Profil *
Ještě dodávám,ten <span> jsem tam měl původně jako jediný způsob odeslání, ale poté, co jsem zjistil že odeslání formuláře přes <span> v FF či MSIE sice spustí serverový skript, ale neodešle žádná POST data, jsem se vrátil k "tradičnímu" <input type='submit'>.
Jaké však bylo mé překvapení, když jsem zjistil že tentokrát se dva ve světě majoritní prohlížeče neuráčí ani odeslat požadavek....

Pokusím se to nejspíš vyřešit jinak, vypadá to na jakousi prapodivnou souhru chyb v mých skriptech a v interpretrech prohlížečů.
manganistan_draselny
Profil *
Prosím omluvte moje zbytečné příspěvky do diskuse, jen pro informaci, pokud budete mít (čistě teoreticky) podobný problém - nespustitelnost formuláře byla zaviněna generováním jednotlivých řádků zvlášť.

Zatímco Opera k takto vygenerovanému objektu přistupuje jako ke kterémukoli jinému, Firefox a MSIE se snaží objekt "inicializovat" již v době generování (tedy přesněji ihned po spuštění prvního innerHTML obsahujícího <form> tag), proto jsou připisováním dalšího kódu poněkud "zmateny" (na to mě přivedla skvělá funkce DOM inspector ve Firefoxu) a výsledný objekt (formulář) nemusí (spíše nemůže) fungovat správně.

Než abych zkoušel např. appendChild apod., prostě jsem celý formulář vygeneroval do proměnné (myslím, že délka 65535 znaků není v tomto chatu dosažitelná) a proměnnou jsem potom přes innerHTML poslal na stránku - funguje to výborně.

Vaše odpověď

Mohlo by se hodit

Nezapomeňte na odkaz na živou ukázku problému.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: