2013-08-07 18 views
8

Mam formularz oznaczony jakoDane wejściowe w formularzu o nazwie "akcja" zastępują właściwość działania formularza. Czy to błąd?

<form class="form1" method="post" action="form1.php" style="width:405px"> 

zwykle, mogę przejść do działania formularza w javascript, odwołując się do .action obiektu postaci, na przykład

document.forms[0].action 

który wróci wartość:

Jeśli jednak jako element formularza mam element o nazwie "akcja", ta "akcja" staje się treścią działania formularza. Oznacza to, że jeśli markup Formularz zawiera, na przykład,

<input name="action" type="hidden" value="check" /> 

Następnie

document.forms[0].action 

zwraca wartość

<input name="action" type="hidden" value="check" /> 

Teraz wyszło jak obejść ten problem: przez użycie

document.forms[0].getAttribute("action") 

Jednak jest to paskudny cios, który zbyt długo mnie zdezorientował. Czy to błąd? Znany pomysł zarządzania DOM? Czy powinienem po prostu nabrać nawyku używania .getAttribute()?

+1

nie błąd, przeglądarka emulacji [IE zachowanie] (http://stackoverflow.com/q/1378155/1048572), który rozpoczął 'formularz ['] elementname styl - poprawne byłoby 'form.elements [elementname] '. Jednak oczekiwałem, że atrybut będzie śledził dane wejściowe ... – Bergi

Odpowiedz

4

Nie nazwałbym tego błędem. Ten efekt występuje, ponieważ atrybuty można odczytać za pomocą element.attributename, a nazwane dane wejściowe w formularzu można uzyskać w ten sam sposób, formelement.inputname. Jeśli istnieje atrybut i dane wejściowe o tej samej nazwie, nie ma gwarancji, która z nich zostanie użyta. Prawdopodobnie zachowuje się inaczej w różnych przeglądarkach.

Osobiście używam getAttribute, jeśli czytam znany atrybut, który został dołączony do znacznika lub został dodany przy użyciu setAttribute w JavaScript. W przypadku wartości dynamicznych, takich jak na przykład atrybut checked pola wyboru, nie używam getAttribute. Ale sądzę, że jest to raczej kwestia osobistych preferencji.

+2

Jedną z różnic przy użyciu 'getAttribute' jest to, że w przeciwieństwie do właściwości' action' może zwracać względne adresy URL. – EricLaw

Powiązane problemy