2012-08-10 38 views
11

Tôi đã chọn hộp kiểm bật hoặc tắt một phần tử chọnchuyển đổi thuộc tính bị vô hiệu hóa trong jquery

Thực ra tôi sử dụng đoạn mã đơn giản này hoạt động tốt.

$("#filtri").change(function(){ 
    if ($("#menuContinenti").attr("disabled")) { 
     $("#menuContinenti").removeAttr("disabled"); 
    } else { 
     $("#menuContinenti").attr("disabled", "disabled"); 
    } 
}); 

Đây có phải là cách tốt nhất hoặc có chức năng .toggle() để chuyển đổi giữa tắt/bật không?

+0

Nếu nó không bị hỏng .. .don't fix it :) – Nope

+0

@ FrançoisWahl có nó không hoạt động (như tôi đã viết), nhưng đây là cách tốt nhất để attemp này t hỏi? Tôi hy vọng jquery cung cấp một cái gì đó giống như một .toggle() chức năng để chuyển đổi giữa các thuộc tính boolean như vô hiệu hóa – Naigel

+1

jQuery có một chuyển đổi nhưng chỉ để chuyển đổi khả năng hiển thị: http://api.jquery.com/toggle/ Tôi không biết của một jQuery chuyển đổi tích hợp để tắt/bật nhưng bạn có thể xem tất cả các hiệu ứng trong tài liệu của họ: http://api.jquery.com/category/effects/ – Nope

Trả lời

37

Bạn nên sử dụng .prop cho người khuyết tật:

$("#menuContinenti").prop('disabled', function() { 
    return ! $(this).prop('disabled'); 
}); 

UPDATE: đã không nhận ra giá trị tài sản hiện nay là một cuộc tranh cãi với chức năng; phiên bản này thậm chí còn sạch hơn:

$("#menuContinenti").prop('disabled', function (_, val) { return ! val; }); 

UPDATE: ES2015

$("#menuContinenti").prop("disabled", (_, val) => !val); 
+0

Nó đẹp và ngắn. Lợi ích của việc sử dụng '.prop' là gì? Tôi không biết bản thân mình nhưng tôi thích sự thiếu hụt mã của bạn. – Nope

+0

Rất đẹp. Tôi chưa bao giờ nghĩ làm theo cách đó. –

+0

'this.disabled' hoạt động tốt thay vì' .prop ('disabled') ' –

7

Bạn có thể viết plugin của riêng bạn mà làm điều gì đó như thế này.

Thêm phần này sau jQuery, trong tệp tập lệnh tốt nhất.

(function($) { 
    $.fn.toggleDisabled = function(){ 
     return this.each(function(){ 
      this.disabled = !this.disabled; 
     }); 
    }; 
})(jQuery); 

Sau đó sử dụng nó như thế này:

$('#my-select').toggleDisabled(); 

Courtesy: Toggle input disabled attribute using jQuery

1

bạn có thể kiểm tra sử dụng $ .là chức năng như dưới đây

$("#filtri").change(function(){ 
    $("#menuContinenti").attr("disabled", ! $(this).is(':checked'));  
}); 
+1

Tôi thực sự thích điều này vì nó rất ngắn – Sudar

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