English summary: There is a problem with javascript form submit. When using a submit input type named “submit” the script doesn’t work.
Ostatnio natknąłem się na pewnego rodzaju “błąd” w przeglądarkach. Dotyczy on wykonania submit dla formularza przez skrypt.
<script>
function ss() {
document.loginform.submit();
}
</script>
<form name=”loginform” action=”/index.php” method=”post”>
<input type=”text” size=”30″ maxlength=”30″ name=”username”>
<a href=# onclick=”javascript:ss();”>Submit form</a>
<input class=”submit” type=”submit” value=”login” name=”submit”>
</form>
Powinno działać! Ale nie działa… i daje komunikat w IE “Obiekt nie obsługuje tej właściwości lub metody”. Przyczyna leży w tym identyfikatorze: <input class=”submit” type=”submit” value=”login” name=”submit“>
Aby skrypt działał to nie można użyć nazwy “submit” lecz jakąkolwiek inną. Dziwne…
Ja bym powiedział raczej, że to błąd programisty, a nie przeglądarek.
Kiedy piszesz:
document.loginform.submit();
interpreter języka JavaScript poszukuje najpierw obiektu o nazwie submit i próbuje go wywołać (bo użyłeś na końcu nawiasów). Wywołać go nie może, bo ten obiekt jest elementem znajdującym się na stronie. Nie jest obiektem wbudowanym ani obiektem użytkownika, więc nie posiada swojej implementacji i wywołać go nie można.
Dopiero gdy interpreter nie znajdzie obiektu o podanej nazwie, zaczyna poszukiwania metody obiektu nadrzędnego (?) (w tym przypadku loginform) o określonej nazwie (submit). Jeżeli ją znajdzie, to ją wywołuje.
Ty, nadając dziecku loginform nazwę submit niejako przesłoniłeś metodę tego obiektu o tej samej nazwie.
Nie radziłbym używać do testowania stron internetowych IE, bo np. w tym przypadku wyświetla nietrafny komunikat. Zdecydowanie bardziej użyteczną informację wyświetla Opera 9.51: