2011-02-02 29 views
5

Nếu tôi có một mẫu với 3 lĩnh vực sau:Làm thế nào để loại trừ các lĩnh vực hình thức nhất định khi nộp mẫu đơn mà không cần vô hiệu hóa các lĩnh vực

Tên Họ Ngày sinh

Khi người dùng điền vào tất cả 3 lĩnh vực và trình bạn sẽ nhận được URL

http: //fakeURL.php?firstName=Fred&lastName=Flintstone&DateOfBirth=2/5/1952 

Tuy nhiên, nếu người dùng chỉ điền vào Tên và ngày sinh bạn sẽ nhận được

http: //fakeURL.php?firstName=Fred&lastName=&DateOfBirth=2/5/1952 (where lastName has no value) 

Làm thế nào để đạt được

http: //fakeURL.php?firstName=Fred&DateOfBirth=2/5/1952 (where lastName and value are removed from the URL) 

Tôi không muốn vô hiệu hóa các lĩnh vực đầu vào khi sử dụng onsubmit. Có cách nào tốt hơn là vô hiệu hóa lĩnh vực đầu vào?

Xin vui lòng giúp ...

+0

* Tại sao * bạn không muốn vô hiệu hóa trường này trong trình xử lý "gửi"? – Pointy

+0

tại sao trường này trống? Trong mọi trường hợp, bạn có cân nhắc sử dụng POST thay vì GET để URL của bạn sạch hơn và nhiều triển khai hơn của bạn bị ẩn khỏi khách truy cập hay không. – Endophage

Trả lời

5

Bạn phải hoặc là:

  1. Remove hoặc vô hiệu hóa các lĩnh vực từ các hình thức trước khi trình
  2. Đừng gửi biểu mẫu, thay vì chuyển hướng đến một URL mà bạn tự xây dựng từ biểu mẫu
  3. Thực hiện yêu cầu AJAX thay vì rời khỏi trang

Asi từ các tùy chọn đó, bạn không thể gửi biểu mẫu này qua GET mà không có tất cả các yếu tố đầu vào trở thành một phần của URL. Đó là một phần của thông số HTML và HTTP.

-1

Bạn nên sử dụng các biểu mẫu với phương thức GETchỉ khi trang mới được đánh dấu và chuyển đi xung quanh.

Vì bạn đang nói về bạn lấy đầu vào từ người dùng (và tôi đoán bạn cũng lưu trữ mà đầu vào trong một cơ sở dữ liệu hoặc một số lưu trữ vĩnh viễn tương tự), bạn nên sử dụng POSTthay.

+0

Nói điều đó với WordPress. – XedinUnknown

+0

Không có gì sai khi * lấy đầu vào từ người dùng * và gửi nó bằng phương thức 'get'. Việc nhập đầu vào được lưu trong thanh địa chỉ sẽ mang lại lợi ích cho người dùng nếu họ cũng làm mới trang. – rorymorris89

9

Chỉ cần loại bỏ "tên" thuộc tính từ các yếu tố đầu vào -

// exclude the inputId from the form collection 
$("#inputId").removeAttr('name'); 

Thưởng thức!

+0

Đây là một giải pháp tuyệt vời, đơn giản. Cảm ơn! – luqita

+1

Điều này đơn giản hơn nhiều so với câu trả lời hàng đầu và hoạt động rất tốt đối với trường hợp khi một số đầu vào chỉ tồn tại để giúp người dùng theo một cách nào đó và không cần gửi (trong trường hợp này chúng tôi không cho nó một 'tên' trong địa điểm đầu tiên). – Kat

+1

[Demo] (http://jsfiddle.net/jqpw7eef/) (sử dụng bảng điều khiển mạng của bảng điều khiển dành cho nhà phát triển để kiểm tra yêu cầu đã gửi, đơn giản chỉ nên là '? Sent = foo'). – Kat

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