Ku pamięci…
Nazwa funkcji w JS nie może być taka sama jak id jakiegoś pola formularza.
FF sobie radzi, opera i m$ – nie.
Żeby nie być gołosłownym…
W pewnym projekcie zaistniała potrzeba użycia javascriptu do submitu formularza z uprzednim podmienieniem wartości pola hidden na wartość podaną jako parametr funkcji.
Czuję, że jak zwykle zakręciłem i nie wiadomo o co mi chodzi.
Do rzeczy więc.
Mamy sobie stronkę:
http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
Form error
name="author" content="Kashub" />
>
<?
if(!empty($_POST)) {
echo '
POST:
' . var_export($_POST, 1) . '
action=„” method=„post” id=„updateWirtForm”>
type=„text/javascript”>
function sru(avid) {
document.getElementById(’sru’).value = avid;
document.getElementById(’updateWirtForm’).submit();
}
type=„hidden” name=„sru” id=„sru” value=„” />
href=„#” onclick=„sru(’1′)”/>wyślij z podmianą hiddena
Na pierwszy rzut oka nic szczególnego – po kliknięciu na link ma się ustawić wartość wpolu hidden i wysłać formularz.
W wyniku spodziewamy się czegoś takiego:
POST:
array (
'sru' => '1',
)
wyślij z podmianą hiddena
… i tak też się dzieje na Firefoksie.
Wszystko było by fajnie, ale spójrzmy co na to np. Opera:
JavaScript - http://localhost/f.php
Event thread: click
Error:
name: TypeError
message: Statement on line 1: The Object does not implement [[Call]]
Backtrace:
Line 1 of script
sru("1");
At unknown location
[statement source code not available]
Również pod m$ie zaawansowany debug wyświetlił niezwykle treściwą informację – „Błąd na stronie”. Być może dało by się gdzieś doczytać komunikat, ale pod winkiem jakoś nie da się ni
c więcej 🙂
Rozwiązanie okazało się bardzo proste, ale nieco nieoczekiwane. Wystarczy zmienić albo nazwę funkcji w javascript albo id hiddena w formie.
Mam nadzieję, że zaoszczędzę komuś nieco czasu dzięki temu wpisowi 🙂