vô hiệu hóa tất cả các yếu tố hình thức bên trong div


161

Có cách nào để vô hiệu hóa tất cả các trường (textarea / textfield / tùy chọn / đầu vào / hộp kiểm / gửi, v.v.) trong một hình thức bằng cách chỉ nói tên div cha trong jquery / javascript?


4
Lưu ý rằng bằng cách này, bạn làm cho các giá trị của các phần tử đó "biến mất" khi gửi biểu mẫu - để giữ giá trị làm cho chúng readOnly, không bị vô hiệu hóa.
Shadow Wizard là Ear For You


1
Một ý tưởng có thể được ẩn / hiển thị một div trước các điều khiển mà nó cho phép / ngăn chặn được nhấp vào, cộng với các điều khiển bị vô hiệu hóa kiểu với css.
Jaider

Câu trả lời:


261

Hãy thử sử dụng :inputbộ chọn, cùng với bộ chọn cha:

$("#parent-selector :input").attr("disabled", true);

Tôi có thể sử dụng điều này để đặt tất cả các đầu vào bên trong div thành giá trị 0 không?
jackson5

2
Tôi cũng muốn tắt <a> ... <a> của tôi cũng đã bật
RAJ

7
Trích dẫn jQuery : Bởi vì: input là một phần mở rộng của jQuery và không phải là một phần của đặc tả CSS, các truy vấn sử dụng: input không thể tận dụng sự tăng cường hiệu năng được cung cấp bởi phương thức DOM querySelectorAll (). Để đạt được hiệu suất tốt nhất khi sử dụng: đầu vào để chọn các thành phần, trước tiên hãy chọn các thành phần bằng bộ chọn CSS thuần, sau đó sử dụng .filter (": input").
acme

2
@acme: Đồng ý 100% nhưng câu hỏi không đưa ra bất kỳ gợi ý nào về bộ chọn mà tôi có thể lọc. Thông tin duy nhất tôi được cung cấp là người dùng phải có thể làm điều đó với tên cha mẹdiv và đó là thông tin đó. Nếu được cung cấp thêm thông tin, tôi có thể đã đưa ra một giải pháp hiệu quả hơn.
Andrew Whitaker

1
Sử dụng .prop () thay vì .attr () (trên jquery 1.6)
Akshay Gundewar

154
$('#mydiv').find('input, textarea, button, select').attr('disabled','disabled');

4
nó phải là ('đầu vào, textarea, nút') tất cả các bộ chọn phải được trích dẫn bằng một bộ dấu ngoặc kép. api.jquery.com/multipl-selector Thực hiện theo cách của bạn, bạn đang gửi nhiều đối số.
Ivan Ivanić

2
Điều này sẽ chỉ tìm thấy bạn đầu vào, bỏ qua textareas và các nút. Bộ chọn đầu vào là cách để đi, nhưng nếu bạn muốn liệt kê chúng một cách rõ ràng, bạn sẽ cần phải sử dụng $('#mydiv').find('input, textarea, button').
Mark Hildreth

1
... hoặc chỉ $ ('# your-form'). children (). prop ('khuyết tật', đúng);
walv

@walv mã của bạn chỉ hoạt động nếu tất cả các thành phần của biểu mẫu là một hậu duệ duy nhất của biểu mẫu. Tìm () tìm tất cả các thành phần trong danh sách bất kể mức độ hậu duệ. Dòng mã này là chính xác ngoài việc sử dụng prop thay vì attr cho các phiên bản jquery mới.
Chris O

32

Đối với jquery 1.6+, sử dụng .prop()thay vì .attr(),

$("#parent-selector :input").prop("disabled", true);

hoặc là

$("#parent-selector :input").attr("disabled", "disabled");

2
bạn đúng nhưng một số thời gian chống đỡ công việc và một số thời gian không hoạt động, đặc biệt là vì hộp kiểm và radiobutton
damon

Tôi nhận ra rằng đây là một chủ đề cũ, nhưng điều này gây ra một số lỗi khi sử dụng bản thảo
Simon Giá

5
    $(document).ready(function () {
        $('#chkDisableEnableElements').change(function () {
            if ($('#chkDisableEnableElements').is(':checked')) {
                enableElements($('#divDifferentElements').children());
            }
            else {
                disableElements($('#divDifferentElements').children());
            }
        });
    });

    function disableElements(el) {
        for (var i = 0; i < el.length; i++) {
            el[i].disabled = true;

            disableElements(el[i].children);
        }
    }

    function enableElements(el) {
        for (var i = 0; i < el.length; i++) {
            el[i].disabled = false;

            enableElements(el[i].children);
        }
    }

4

Đơn giản là dòng mã này sẽ vô hiệu hóa tất cả các yếu tố đầu vào

$('#yourdiv *').prop('disabled', true);

câu trả lời tốt nhất từ ​​ý kiến ​​của tôi.
Ajay2707

2

Làm thế nào về việc đạt được điều này bằng cách chỉ sử dụng thuộc tính HTML 'bị vô hiệu hóa'

<form>
 <fieldset disabled>
  <div class="row">
   <input type="text" placeholder="">
   <textarea></textarea>
   <select></select>
  </div>
  <div class="pull-right">
    <button class="button-primary btn-sm" type="submit">Submit</button>
  </div>
 </fieldset>
</form>

Chỉ bằng cách đặt bị vô hiệu hóa trong bộ trường, tất cả các trường bên trong bộ trường đó bị vô hiệu hóa.

$('fieldset').attr('disabled', 'disabled');

1

Tôi đang sử dụng chức năng dưới đây tại các điểm khác nhau. Hoạt động trong một phần tử div hoặc nút trong bảng miễn là bộ chọn bên phải được sử dụng. Chỉ ": nút" sẽ không kích hoạt lại cho tôi.

function ToggleMenuButtons(bActivate) {
    if (bActivate == true) {
        $("#SelectorId :input[type='button']").prop("disabled", true);
    } else {
        $("#SelectorId :input[type='button']").removeProp("disabled");
    }
}

hai trong một giải pháp tuyệt vời.
3 quy tắc

0

Theo dõi sẽ vô hiệu hóa tất cả các đầu vào nhưng sẽ không thể vào lớp btn và cũng đã thêm lớp để ghi đè vô hiệu hóa css.

$('#EditForm :input').not('.btn').attr("disabled", true).addClass('disabledClass');

lớp css

.disabledClass{
  background-color: rgb(235, 235, 228) !important;
}

0

Đối với tôi, câu trả lời được chấp nhận không hoạt động vì tôi cũng có một số trường ẩn mạng asp cũng bị vô hiệu hóa nên tôi chỉ chọn tắt các trường hiển thị

//just to save the list so we can enable fields later
var list = [];
$('#parent-selector').find(':input:visible:not([readonly][disabled]),button').each(function () {
    list.push('#' + this.id);
});

$(list.join(',')).attr('readonly', true);

0

Sử dụng Lớp CSS để ngăn chặn Chỉnh sửa các thành phần Div

CSS:

.divoverlay
{
position:absolute;
width:100%;
height:100%;
background-color:transparent;
z-index:1;
top:0;
}

JS:

$('#divName').append('<div class=divoverlay></div>');

Hoặc thêm tên lớp trong Thẻ HTML. Nó sẽ ngăn không cho chỉnh sửa các yếu tố Div.


0

Chỉ loại văn bản

$(".form-edit-account :input[type=text]").attr("disabled", "disabled");

Chỉ loại Mật khẩu

$(".form-edit-account :input[type=password]").attr("disabled", "disabled");

Chỉ loại email

$(".form-edit-account :input[type=email]").attr("disabled", "disabled");
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.