2009-12-27 41 views
8

Tôi có biểu mẫu cần javascript để được bật để xác thực, có cách nào để tắt nút gửi khi javascript bị vô hiệu hóa và cảnh báo người dùng bật tính năng này trước không?tắt nút gửi khi javascript bị tắt

+7

Kiểm tra tính cơ bản của phía máy khách dữ liệu chỉ có thể là sự tiện lợi cho người dùng. Nó không thể cung cấp cho bạn bất kỳ bảo mật nào. Khách hàng độc hại có thể gửi bất kỳ dữ liệu nào họ thích. Thực hiện kiểm tra trên máy chủ. Sau đó, bạn sẽ không cần phải lo lắng về việc người dùng có bật JS hay không. – Quentin

+1

Có lý do kinh doanh nào cho việc này không? Chỉ cần FYI (nếu bạn mới làm quen với điều này), tất cả các xác nhận hợp lệ được thực hiện bởi JavaScript có thể dễ dàng bị phá vỡ - bạn phải luôn xác thực dữ liệu biểu mẫu trên máy chủ. –

+0

lý do cho điều này là tôi có nhiều biểu mẫu tính giá trên nhiều mặt hàng, khi javascript bị tắt xác thực, không hoạt động (tôi đang sử dụng plugin jquery để xác thực), nó sẽ không hoạt động và khi người dùng gửi nó, biểu mẫu sẽ gửi các trường trống – datisdesign

Trả lời

24

Tắt theo mặc định và sử dụng JavaScript để bật.

<input type="submit" value="Submit" id="submitBtn" disabled /> 

<script type="text/javascript"> 
var _onload = window.onload || function() 
{ 
    document.getElementById('submitBtn').disabled = false; 
} 

_onload(); 
</script> 

Bằng cách đó, nếu JavaScript bị tắt thì nút cũng sẽ vẫn bị vô hiệu hóa.

jQuery phiên bản:

<script type="text/javascript"> 
$(function(){ 
    $('#submitBtn').attr('disabled', false); 
}); 
</script> 
+0

Cảm ơn sự giúp đỡ của bạn :) – datisdesign

+1

Chỉ cần cẩn thận với hàm '_onload', vì nếu thuộc tính' window.onload' đã được thiết lập trước đó, chức năng của bạn sẽ * không bao giờ * chạy. Trên thực tế, vì khối 'script' được xác định sau đầu vào, bạn có thể giả định rằng' getElementById' sẽ tìm thấy nó bởi vì khi kịch bản được đánh giá, đầu vào đã có trong DOM ... – CMS

+1

@CMS Right. Đó là lý do tại sao tôi thích jQuery. –

2

Không xác định hành động biểu mẫu HTML, mà chỉ xác định một trình xử lý sự kiện onSubmit javascript. Nếu javascript không được kích hoạt, onSubmit sẽ không kích hoạt, nhưng vì không có hành động biểu mẫu nào, nút gửi cũng sẽ không làm bất cứ điều gì.

Bạn cũng có thể chọn để có hành động biểu mẫu HTML chuyển đến trang lỗi giải thích rằng javascript phải được bật để người dùng có một số loại phản hồi.

Hoặc bạn có thể bắt đầu bằng nút bị tắt (như các áp phích khác được đề xuất). Nếu bạn làm điều đó, bạn cũng nên xem xét một thông báo trên biểu mẫu cho biết tại sao nút bị tắt. Xóa tin nhắn đó bằng javascript nếu nó được kích hoạt cùng lúc bạn bật lại nút.

0

Bởi vì việc vô hiệu hóa một nút lập trình tùy thuộc vào môi trường và cảnh báo ông đều nhiệm vụ tùy thuộc vào một số loại của một ngôn ngữ kịch bản (như JavaScript), câu trả lời là không: -/

+0

Vâng, bạn có thể tắt nó theo mặc định và sau đó kích hoạt nó với JavaScript –

+0

ngay! tôi đã không nghĩ về điều đó, nhưng dù sao, tôi không phải là một fan hâm mộ lớn của javascript phụ thuộc ... – moritz

+0

là câu hỏi không được phụ thuộc vào javascript? – Jon

5

nó đã bị vô hiệu hóa theo mặc định và nếu có javascript, sau đó kích hoạt nó.

+0

+1 đây là đề xuất dễ hiểu nhất và hợp lý nhất. – cletus

+0

Cảm ơn bạn cletus :) – johnnyArt

0

Bạn có giải pháp cho phép một phần. Đối với phần Cảnh báo, bạn có thể sử dụng thẻ cũ tốt. (-:

<noscript> 
<H1> It Wont work w/o javascript. Please Enable</h1> 
</noscript> 
0

Excuse những lời cuối nhưng điều này tôi đã suy nghĩ về cách giải quyết vấn đề này như tôi có một vấn đề tương tự và nó đã dẫn tôi đến đây Bạn nên thường xuyên chương trình trang web của bạn mà không cần javascript và thêm nó sau để chỉnh sửa. nó, nhưng trong trường hợp của tôi bằng cách sử dụng những thứ như lightbox đang được sử dụng như đầu vào, mà nếu javascript bị vô hiệu hóa, không hoạt động đúng (đặc biệt là kể từ khi tôi vượt qua các giá trị cho cha mẹ của nó). được bật, vì vậy bạn chỉ cần đặt ở đầu tài liệu của mình

<?php if (isset($_POST)) { 
    //redirect to page, or set a message variable saying "no results saved" 
    header('some_page'); 
    $message = "We've detected you do not have " . 
       "javascript enabled. No results saved"; 
} ?> 

Từ đó, bạn sẽ phải thiết lập tất cả các nút trên trang của bạn để nói

<input name="button" id="button" type="submit" onclick="return false;" /> 

hoặc bạn có thể đơn giản hơn đi

<form name="my_form" id="my_form" method="post" action="" onclick="return false;" /> 

Hope this helps!

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