Làm cách nào để vô hiệu hóa tất cả <input> bên trong một biểu mẫu với jQuery?


Câu trả lời:


283

Trong các phiên bản cũ hơn, bạn có thể sử dụng attr. Kể từ jQuery 1.6, bạn nên sử dụng propthay thế:

$("#target :input").prop("disabled", true);

Để vô hiệu hóa tất cả các yếu tố hình thức bên trong 'mục tiêu'. Xem :input:

Phù hợp với tất cả các yếu tố đầu vào, textarea, select và nút.

Nếu bạn chỉ muốn các <input>yếu tố:

$("#target input").prop("disabled", true);

21
Kể từ jQuery 1.6, bạn nên sử dụng$("#target :input").prop("disabled", true);
danijel

4
Ai đó nên chỉnh sửa câu trả lời bằng phương pháp cập nhật - đây chỉ là thông tin xấu vào thời điểm này.
Ben Claar

và trong một cuộc gọi lại gửi (), sử dụng $ (này), làm thế nào để làm điều đó?
Olivier Pons

2
@OlivierPons $(this).closest('form').find('input').prop('disabled', true);. Không chắc chắn nếu bạn có thể hợp nhất điều đó tốt hơn, tôi vẫn còn khá mơ hồ về jQuery.
wjanner

39

Trên ví dụ là về mặt kỹ thuật không chính xác. Trên mỗi jQuery mới nhất, nên sử dụng prop()phương thức này cho những thứ như bị vô hiệu hóa. Xem trang API của họ.

Để vô hiệu hóa tất cả các thành phần của biểu mẫu bên trong 'đích', hãy sử dụng: bộ chọn đầu vào khớp với tất cả các yếu tố đầu vào, văn bản, chọn và nút.

$("#target :input").prop("disabled", true);

Nếu bạn chỉ muốn các yếu tố, sử dụng này.

$("#target input").prop("disabled", true);

15

Ngoài ra cách ngắn gọn hơn là sử dụng công cụ chọn của họ. Vì vậy, để vô hiệu hóa tất cả các thành phần biểu mẫu trong div hoặc biểu mẫu cha.

$myForm.find(':input:not(:disabled)').prop('disabled',true)

13

bạn có thể thêm

 <fieldset class="fieldset">

và sau đó bạn có thể gọi

 $('.fieldset').prop('disabled', true);

8

Để vô hiệu hóa tất cả các hình thức, dễ dàng như viết:

jQuery 1.6+

$("#form :input").prop("disabled", true);

jQuery 1.5 trở xuống

$("#form :input").attr('disabled','disabled');

8

Với một dòng này, bạn có thể vô hiệu hóa bất kỳ trường đầu vào nào trong một biểu mẫu

$('form *').prop('disabled', true);

điều này không cần thiết thêm một thuộc tính bị vô hiệu hóa cho mọi phần tử trong biểu mẫu.
Osvaldo Maria

@OsvaldoMaria yeah, đó là do bộ chọn sao (tất cả), bạn có thể thêm lớp .custom-class cho tất cả các thành phần đầu vào bạn muốn tắt, sau đó thay đổi bộ chọn thành $ ('form .custom-class'). Prop ( 'tàn tật', đúng ').
Samir Rahimy

-1

Câu trả lời dứt khoát (bao gồm các thay đổi đối với api jQuery ở phiên bản 1.6) đã được Gnarf đưa ra


Ông yêu cầu "vô hiệu hóa tất cả các đầu vào bên trong một biểu mẫu", không chỉ "vô hiệu hóa tất cả các đầu vào".
Bengala

@Bengala chắc chắn, nhưng bạn đang đánh dấu tôi gay gắt vì là người đầu tiên chỉ ra API đã thay đổi. Tại thời điểm tôi đăng bài này, không có câu trả lời nào khác đề cập đến điểm này.
ErichBSchulz

Tôi hiểu, nhưng tôi nghĩ bạn nên bao gồm một câu trả lời đúng với các khoản tín dụng tương ứng, liên kết chỉ cho thấy cách vô hiệu hóa tất cả các đầu vào, mà tôi khẳng định, nó không trả lời tất cả câu hỏi.
Bengala
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.