2011-10-17 43 views
5

Tôi có biểu mẫu dựa trên javascript để thực hiện tất cả xác thực biểu mẫu phía khách hàng. Các mẫu được gửi qua javascript nếu tất cả các trường được điền một cách chính xác trong như trái ngược với cách sử dụng một tiêu chuẩn nút "submit":Gửi Biểu mẫu Không có Javascript

<button name="button" type=button onclick="validateReqFields('mForm', 'username, password, compPassword, firstName, lastName');">Register</button> 

document[formName].submit(); 

Nếu khách hàng có Javascript bị vô hiệu, tất cả các hình thức xác nhận được thực hiện phía máy chủ (của nó thực sự thực hiện lại bất kể nhưng điều đó không quan trọng). Vấn đề nằm ở việc sử dụng nút có loại nút thay vì gửi. Nó hoạt động hoàn hảo với javascript, nhưng làm thế nào để có được xung quanh điều này khi javascript không có sẵn? Nếu tôi sử dụng nút gửi cùng với javascript thì nó sẽ gửi biểu mẫu với mỗi nút nhấn và không hoạt động đúng cách.

+1

Bạn nên sử dụng ' ' – Pav

+1

Vui lòng xem c của tôi bỏ qua bên dưới. Tôi không thể làm việc này. Nó nói rõ ràng trong câu hỏi. – ryandlf

Trả lời

2

Sử dụng nút gửi thay vì nút "nút" và sau đó có hàm trả về false validateReqFields nếu biểu mẫu không hợp lệ.

Sau đó, hãy gửi biểu mẫu từ validateReqFields nếu bạn muốn.

cách

  • Nếu hình thức có giá trị này, sau đó vào nút nhấp chuột sẽ bong bóng và hình thức sẽ nộp
  • Nếu hình thức không hợp lệ, sau đó javascript sẽ hủy bỏ nút bấm
  • Nếu javascript bị tắt, sau đó nó sẽ được gửi đến máy chủ dưới dạng dự phòng
+0

Điều này hoạt động hoàn hảo. Cảm ơn bạn! – ryandlf

+0

Lợi thế của việc hoán đổi phần tử 'button' bằng' đầu vào [type = submit] 'là gì? – alex

+0

@alex biểu mẫu sẽ không gửi trên phần tử nút. –

4

Thay đổi thuộc tính type thành submit.

<button name="button" type="submit" ... /> 
+0

Tôi không thể làm điều này vì nó không cho phép javascript của tôi giữ cho trang không được gửi và do đó làm cho javascript của tôi vô dụng vì trang gửi anyways và chỉ sử dụng xác thực phía máy chủ. – ryandlf

+2

@ryandl: Bạn nên sử dụng 'event.preventDefault()'. – alex

+1

Yay cho downvotes không giải thích được :) – alex

-2

Sử dụng thẻ <noscript></noscript> để xác định nút gửi "bình thường" khi javascript bị tắt.

-1

Bạn có thể sử dụng thẻ <noscript> và đóng gói mã ở trên với loại nút như gửi. Nếu khách hàng có js, mã bên trong noscript sẽ bị bỏ qua.

+0

Vì vậy, trong trường hợp javascript bị vô hiệu hóa và trang sử dụng các thẻ noscript, tôi sẽ không có hai nút trên trang? – ryandlf

+1

Nếu bạn định downvote câu trả lời "sử dụng' noscript' ", ít nhất là giải thích tại sao bạn nghĩ nó không hữu ích. – alex

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