2013-08-07 34 views
8

Tôi có một hình thức đánh dấu lên nhưĐầu vào trong biểu mẫu có tên 'action' sẽ ghi đè thuộc tính tác vụ của biểu mẫu. Đây có phải là một lỗi?

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

Thông thường, tôi có thể truy cập vào các hành động của form trong javascript bằng cách tham khảo .action của đối tượng hình thức, ví dụ

document.forms[0].action 

đó sẽ quay trở lại giá trị

form1.php 

Tuy nhiên, nếu tôi có, như một thành phần của biểu mẫu, một mục có tên "hành động", "hành động" này sẽ trở thành nội dung của hành động của biểu mẫu. Nghĩa là, nếu đánh dấu hình thức chứa, ví dụ,

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

Sau đó

document.forms[0].action 

trả về giá trị

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

Bây giờ, tôi đã làm việc ra làm thế nào để làm được việc này: bởi sử dụng

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

Tuy nhiên, đó là Gotcha khó chịu khiến tôi bối rối quá lâu. Đây có phải là một lỗi? Bí quyết quản lý DOM đã biết? Hoặc tôi nên đi vào thói quen sử dụng .getAttribute()?

+1

Không phải là lỗi, trình duyệt đang mô phỏng [hành vi IE] (http://stackoverflow.com/q/1378155/1048572) bắt đầu kiểu 'form [elementname]' - đúng là 'form.elements [elementname] '. Tuy nhiên tôi đã dự kiến ​​thuộc tính để đổ bóng đầu vào… – Bergi

Trả lời

4

Tôi sẽ không gọi đây là lỗi. Hiệu ứng này xảy ra, bởi vì các thuộc tính có thể được đọc bằng cách sử dụng element.attributename và đầu vào được đặt tên bên trong một biểu mẫu có thể được truy cập theo cùng một cách, formelement.inputname. Nếu có một thuộc tính và một đầu vào có cùng tên, không có sự đảm bảo nào sẽ được sử dụng. Nó có thể hoạt động khác nhau trong các trình duyệt khác nhau.

Cá nhân tôi sử dụng getAttribute nếu tôi đang đọc thuộc tính đã biết được bao gồm trong đánh dấu hoặc được thêm bằng cách sử dụng setAttribute trong JavaScript. Đối với các giá trị động chẳng hạn như thuộc tính checked của hộp kiểm, tôi không sử dụng getAttribute. Nhưng đây là một câu hỏi về sở thích cá nhân, tôi đoán vậy.

+2

Một khác biệt khi sử dụng 'getAttribute' là, không giống thuộc tính' action', nó có thể trả về các url tương đối. – EricLaw

Các vấn đề liên quan