2011-07-03 10 views
12

mam formularz z listy rozwijanej select, a moja wybierz tag wygląda następująco:JavaScript zastrzeżone słowo "zaprogramowany"

<select name='preset' onchange='preset(this);'>

Teraz mam funkcji JavaScript prostu zrobić alert('test');. Cóż, kiedy zmieniam wybór w menu, pojawia się komunikat "ustawienie wstępne nie jest funkcją". Tak, zweryfikuję poprawność pisowni, a nawet wykonałem ogólne wywołanie wczytywania strony i otrzymałem alert.

Jeśli zmienię nazwę funkcji na coś innego, na przykład presetx, to działa dobrze. Pomyślałem więc, że może "preset" jest jakimś zarezerwowanym słowem w JavaScript, ale nie mogę znaleźć czegoś takiego. Dlaczego tak się stało?

Aktualizacja

Obecnie nie mam nic innego na stronie testowej z wyjątkiem mojej formy i funkcji. Żadna struktura nie zawiera kodu lub innego kodu, więc wiem, że to coś takiego.

Odpowiedz

15

Niektóre przeglądarki mapują elementy z atrybutami name na zmienne globalne. Tak więc <select name='preset' onchange='preset(this);'> faktycznie tworzy (w niektórych przeglądarkach) globalną własność preset. To nadpisze funkcję preset.

Ponieważ preset jest teraz obiektem HTMLSelectElement, a nie funkcją, pojawia się błąd "nie funkcja".

+0

aaa, co ma sens, jak mogłem tego przegapić:/ – newbiejsperson

+6

Ponieważ jest to moroniczna anty-funkcja, która nigdy nie powinna istnieć i nigdy nie powinna być zaimportowana do standardu W3C. Ale dygresja ... – lonesomeday

+2

Yikes, nigdy o tym nie wiedziałem. Javascript ma własne 'register_globals' (choć nieco mniej niebezpieczne niż PHP) –

Powiązane problemy