2009-09-03 12 views

Trả lời

118

Thiết lập một yếu tố hình thức để vô hiệu hóa sẽ ngăn chặn nó xảy ra với máy chủ, ví dụ:

<input disabled="disabled" type="text" name="test"/> 

Trong javascript nó sẽ có nghĩa một cái gì đó như thế này:

var inputs = document.getElementsByTagName('input'); 
for(var i = 0;i < inputs.length; i++) { 
    if(inputs[i].style.display == 'none') { 
     inputs[i].disabled = true; 
    } 
} 
document.forms[0].submit(); 

Trong jQuery:

$('form > input:hidden').attr("disabled",true); 
    $('form').submit(); 
+15

Với bộ chọn giả của jQuery ': input' thay vì 'input' bạn cũng có thể dễ dàng vô hiệu hóa tất cả các phần tử' select' và 'textarea' –

+8

Trong jQuery> = 1.6, thay vì' attr ("disabled", true) 'bạn nên sử dụng 'prop (" disabled ", true)' http://api.jquery.com/prop/ – yorch

+2

@ dominicbri7 - Như của jQuery 1.6, sử dụng '.prop()' thay cho '.attr()' được khuyên dùng để nhận và đặt cả thuộc tính bị vô hiệu hóa và được kiểm tra. Kiểm tra và hoặc thiết lập bằng cách sử dụng '.attr()' sẽ trong một số trường hợp trả lại kết quả không mong muốn. Vui lòng đọc tài liệu jQuery trước khi bình luận về những gì yorch đang đề cập đến. – zgr024

1

Tôi sẽ xóa giá trị khỏi đầu vào hoặc tách đối tượng đầu vào khỏi DOM để nó không tồn tại để được đăng ở vị trí đầu tiên.

13

Bạn có thể sử dụng javascript để đặt thuộc tính bị tắt. Sự kiện bấm nút 'gửi' có lẽ là nơi tốt nhất để làm điều này.

Tuy nhiên, tôi khuyên bạn không nên làm điều này. Nếu có thể, bạn nên lọc truy vấn của mình trên máy chủ. Điều này sẽ đáng tin cậy hơn.

7

Nếu bạn muốn vô hiệu hóa tất cả các yếu tố hoặc các yếu tố nhất định trong một yếu tố phụ huynh ẩn, bạn có thể sử dụng

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled"); 

này dụ http://jsfiddle.net/gKsTS/ vô hiệu hóa tất cả các hộp thoại trong vòng một div ẩn

+0

Đây là một giải pháp rất tốt như là lặp qua div ẩn và vô hiệu hóa tất cả. nó sẽ nhận được nhiều hơn +1 – yeppe

3

Một rất đơn giản (nhưng không phải lúc nào giải pháp thuận tiện nhất) là xóa thuộc tính "tên" - tiêu chuẩn yêu cầu các trình duyệt không gửi các giá trị chưa đặt tên và tất cả các trình duyệt mà tôi biết tuân theo quy tắc này.

+3

Không nên đề xuất bởi vì nếu bạn thay đổi trạng thái thông qua javascript bạn khó có thể đặt lại các đầu vào mà không cần lưu vào bộ nhớ cache tất cả các thuộc tính tên. Đó là cách dễ dàng hơn để chuyển đổi trạng thái vô hiệu hóa. – Simon

4

gì về:

$('#divID').children(":input").prop("disabled", true); // disable 

$('#divID').children(":input").prop("disabled", false); // enable 

Để chuyển đổi tất cả trẻ em đầu vào (lựa chọn, hộp kiểm tra, đầu vào, textareas, vv) bên trong một div ẩn.

+0

Đây là một giải pháp tuyệt vời nếu bạn muốn lấy tất cả các yếu tố đầu vào. làm tốt lắm – doz87

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