2010-05-25 33 views
51

tức là .:Có hợp lệ để có hai yếu tố đầu vào có cùng tên không?

<form 1> 
<input type="hidden" name="url" value="1"> 
</form 1> 

<form 2> 
<input type="hidden" name="url" value="2"> 
</form 2> 

Đây có phải là phép hợp lệ?

+0

Có thể trùng lặp [biểu mẫu HTML có nhiều thành phần điều khiển ẩn cùng tên] (http://stackoverflow.com/questions/452066/html-form-with-multiple-hidden-control-elements-of -the-same-name) –

Trả lời

32

Có, trong trường hợp của bạn, nó hợp lệ. Xem xét việc này:

Đây là Tốt

<form name="form1"> 
    <input type="hidden" name="url" value="1"> 
</form> 

<form name="form2"> 
    <input type="hidden" name="url" value="2"> 
</form> 

này là không tốt

<form name="form1"> 
    <input type="hidden" name="url" value="1"> 
    <input type="hidden" name="url" value="2"> 
</form> 
+8

tại sao bỏ phiếu xuống? –

+20

Nó hợp lệ. Nó sẽ tạo ra không có sự nhầm lẫn cho ngôn ngữ phía máy chủ (ngay cả PHP, với các quy ước của nó để đặt tên các trường chia sẻ một tên, sẽ liên tục và dự đoán xử lý nhiều đầu vào không sử dụng quy ước đó). Nó sẽ tạo ra không có sự nhầm lẫn cho JavaScript (mà sẽ trình bày các yếu tố như một bộ sưu tập và ** không ** bỏ qua một trong số chúng). Nó/có thể/tạo ra sự nhầm lẫn cho các tác giả viết mã mà không biết họ đang làm gì, nhưng nó là tốt bởi spec. – Quentin

+0

@David Dorward: Cảm ơn bạn đã giải thích điều đó, tôi đã xóa phần đó. –

9

Có.

Thêm, điều quan trọng là nếu bạn đang xử lý các nhóm nút radio.

+0

Chính xác. Hoặc với hộp kiểm, trong trường hợp này bạn có thể đặt [] ở cuối "url []" và nó tạo ra một mảng để được chọn. –

+2

@Kerry - Đó là một chủ nghĩa PHP. Hầu hết các thư viện xử lý biểu mẫu đều khá vui khi không có tên đặc biệt cho các nhóm điều khiển. – Quentin

+0

Ah, rất vui được biết. –

8

Có - mỗi người sẽ chỉ gửi cùng với biểu mẫu tương ứng.

Nếu bạn có chúng trong cùng một biểu mẫu, một người sẽ ghi đè lên biểu mẫu kia và một biểu tượng sẽ không hợp lệ.

+10

Bạn đã sai. Nếu bạn có nhiều đầu vào có cùng tên, một người sẽ * không * ghi đè lên tên khác. Tất cả các yếu tố đầu vào sẽ được thêm vào phần thân của yêu cầu theo thứ tự chúng xuất hiện trong html. Và nó hợp lệ: [Biểu mẫu HTML có nhiều thành phần điều khiển ẩn cùng tên] (http://stackoverflow.com/questions/452066/html-form-with-multiple-hidden-control-elements-of-the-same- name) – Mahmoodvcs

+2

@Mahmoodvcs: Điều này không đúng. Nếu biểu mẫu được đăng lên dịch vụ PHP, thì giá trị cuối cùng sẽ thắng. Nếu bạn muốn nhiều giá trị được gán cho một tên, thì mỗi tên phải kết thúc bằng '[]'. –

+4

Chúng ta đang nói về HTML ở đây, không phải PHP. – Mahmoodvcs

2

Để kiểm tra nếu nó là hợp lệ hay không, tạo bạn trang và thử nghiệm tại W3C ở đây:

http://validator.w3.org/

+0

Và hy vọng rằng trình xác thực là không có lỗi :-) –

6

"Điều này không tốt" phân tích cú pháp chính xác trên mọi trình duyệt mà tôi biết; nếu hai url xuất hiện trong chuỗi được mã hóa url, nó sẽ được coi là một mảng. Hãy thử điều này trong JQuery:

$('<form name="form1">\ 
    <input type="hidden" name="url" value="1">\ 
    <input type="hidden" name="url" value="2">\ 
</form>').serialize() 

và bạn sẽ nhận được: "url=1&url=2"

một chuỗi truy vấn phân tích cú pháp cũng như các văn bản sẽ trả về một cấu trúc json như thế này:

{"url":["1", "2"]} 

Có đúng spec? Không, nhưng không phải là tạo ra một chuỗi nhiều dòng bằng cách thoát khỏi EOL với một dấu gạch chéo ngược, như tôi đã làm ở trên.

1
A) 

< form 1> 
< input type="hidden" name="url" value="1"> 
< /form 1> 

and 

< form 2> 
< input type="hidden" name="url" value="2"> 
< /form 2> 

is Okay,beacuse forms submiting time will be different 


B) 

< form 1> 
< input type="hidden" name="url" value="1"> 
< input type="hidden" name="url" value="2"> 
< /form 1> 
is also okay, but not standard coding practice 

JAVA Code two extract both values :: 

Map<String,String[]> parmMap = requestObj.getParameterMap(); 
String input1 = parmMap.get("url")[0]; 
String input2 = parmMap.get("url")[1]; 
Các vấn đề liên quan