Hãy tưởng tượng bạn có một biểu mẫu mà bạn chuyển đổi khả năng hiển thị của một số trường. Và nếu trường không được hiển thị, bạn không muốn giá trị của nó được yêu cầu.
Làm thế nào để bạn xử lý tình huống này?
Câu trả lời:
Đặt một phần tử biểu mẫu thành vô hiệu hóa sẽ ngăn nó truy cập vào máy chủ, ví dụ:
<input disabled="disabled" type="text" name="test"/>
Trong javascript nó sẽ có nghĩa 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();
attr("disabled", true)
bạn nên sử dụng prop("disabled", true)
api.jquery.com/prop
.prop()
thay vì .attr()
được khuyến nghị để nhận AND thiết lập cả thuộc tính đã tắt và đã kiểm tra. Kiểm tra và hoặc cài đặt bằng cách sử dụng .attr()
trong một số trường hợp sẽ trả lại kết quả không mong muốn. Vui lòng đọc tài liệu jQuery trước khi nhận xét về những gì yorch đang đề cập đến.
Bạn có thể sử dụng javascript để đặt thuộc tính bị vô hiệu hóa. Sự kiện nhấp vào 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.
Nếu bạn muốn vô hiệu hóa tất cả các phần tử hoặc các phần tử nhất định trong một phần tử mẹ ẩn, bạn có thể sử dụng
$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");
Ví dụ này http://jsfiddle.net/gKsTS/ tắt tất cả các hộp văn bản trong một div ẩn
Thế còn:
$('#divID').children(":input").prop("disabled", true); // disable
và
$('#divID').children(":input").prop("disabled", false); // enable
Để chuyển đổi tất cả các đầu vào con (lựa chọn, hộp kiểm, đầu vào, vùng văn bản, v.v.) bên trong một div ẩn.
Một giải pháp rất đơn giản (nhưng không phải lúc nào cũng là thuận tiện nhất) là xóa thuộc tính "name" - tiêu chuẩn yêu cầu các trình duyệt không được gửi các giá trị không có tên và tất cả các trình duyệt mà tôi biết đều tuân thủ quy tắc này.
:input
thay vìinput
bạn cũng có thể dễ dàng vô hiệu hóa tất cảselect
vàtextarea
các yếu tố