2011-12-07 34 views
49

Tôi đang tìm kiếm một phương pháp để Enable và Disable các div id = "dcalc" và trẻ em của nó.Enable & Vô hiệu hóa một Div và các yếu tố của nó trong Javascript

<div id="dcalc" class="nerkheArz" 
style="left: 50px; top: 150px; width: 380px; height: 370px; 
background: #CDF; text-align: center" > 
<div class="nerkh-Arz"></div> 
<div id="calc"> </div> 
</div> 

Tôi muốn tắt chúng khi tải trang và sau đó bằng một lần nhấp, tôi có thể bật chúng?

Đây là những gì tôi đã cố gắng

document.getElementById("dcalc").disabled = true; 
+3

Sự khác biệt giữa yếu tố 'div được bật" và "bị vô hiệu hóa" là gì? Nó thực sự chỉ là các phần tử 'input' có thể bị vô hiệu hóa. Hay bạn muốn vô hiệu hóa tất cả các phần tử 'input' con trong một' div'? –

+0

Tôi muốn tắt mọi div nằm dưới chính – Emax

+0

Vui lòng truy cập: http://stackoverflow.com/questions/639815/how-to-disable-all-div-content/14973111#14973111 –

Trả lời

119

Bạn sẽ có thể thiết lập các thông qua attr() hoặc prop() chức năng trong jQuery như hình dưới đây:

jQuery (< 1.7):

// This will disable just the div 
$("#dcacl").attr('disabled','disabled'); 

hoặc

// This will disable everything contained in the div 
$("#dcacl").children().attr("disabled","disabled"); 

jQuery (> = 1.7):

// This will disable just the div 
$("#dcacl").prop('disabled',true); 

hoặc

// This will disable everything contained in the div 
$("#dcacl").children().prop('disabled',true); 

hoặc

// disable ALL descendants of the DIV 
$("#dcacl *").prop('disabled',true); 

Javascript:

// This will disable just the div 
document.getElementById("dcalc").disabled = true; 

hoặc

// This will disable all the children of the div 
var nodes = document.getElementById("dcalc").getElementsByTagName('*'); 
for(var i = 0; i < nodes.length; i++){ 
    nodes[i].disabled = true; 
} 
+3

'.prop ('vô hiệu hóa', đúng) 'sẽ tốt hơn. Và khối mã cuối cùng của bạn bị rò rỉ toàn cầu (bạn cần 'var i'). – ThiefMaster

+0

@ThiefMaster - Cảm ơn :) Bài đăng đã được cập nhật để khắc phục vấn đề biến toàn cầu, và bây giờ giải quyết cả hai giải pháp .attr() và .prop(). –

+0

Cảm ơn câu trả lời rất hay, Bạn nghĩ cái nào tốt hơn và nhanh hơn? tôi sẽ sử dụng JavaScript hay Jquery! – Emax

17

sẽ chọn sau tất cả các yếu tố hậu duệ và vô hiệu hóa chúng:

$("#dcacl").find("*").prop("disabled", true); 

Nhưng nó chỉ thực sự có ý nghĩa để vô hiệu hóa các yếu tố nhất định loại: đầu vào, nút, v.v., vì vậy bạn muốn có thêm thông tin chi tiết bộ chọn fic:

$("#dcac1").find(":input").prop("disabled",true); 
// noting that ":input" gives you the equivalent of 
$("#dcac1").find("input,select,textarea,button").prop("disabled",true); 

Để bật lại, bạn chỉ cần đặt "bị vô hiệu" thành false.

Tôi muốn Disable họ tại tải trang và sau đó bằng một nhấp chuột tôi có thể giúp họ

OK, vì vậy đặt mã trên trong một handler tài liệu đã sẵn sàng, và thiết lập một handler nhấp chuột thích hợp:

$(document).ready(function() { 
    var $dcac1kids = $("#dcac1").find(":input"); 
    $dcac1kids.prop("disabled",true); 

    // not sure what you want to click on to re-enable 
    $("selector for whatever you want to click").one("click",function() { 
     $dcac1kids.prop("disabled",false); 
    } 
} 

tôi đã lưu trữ kết quả của bộ chọn trên giả định rằng bạn không bổ sung thêm các yếu tố để div giữa tải trang và nhấp chuột.Và tôi đã đính kèm trình xử lý nhấp chuột với .one() vì bạn chưa chỉ định yêu cầu để vô hiệu hóa lại các phần tử, vì vậy có lẽ sự kiện chỉ cần được xử lý một lần. Tất nhiên bạn có thể thay đổi .one() thành .click() nếu thích hợp.

+0

Tôi muốn có nó khi tải trang? nó có thể là jquery? – Emax

+0

Khối cuối cùng của mã trong câu trả lời của tôi hiện nó trên tải trang (tốt, trên tài liệu sẵn sàng mà là một sự lựa chọn tốt hơn cho điều này) và nó hiện nó với jQuery - không phải là những gì bạn muốn? – nnnnnn

+0

Nó không hoạt động? http://stackoverflow.com/questions/8468761/disable-div-on-load-is-not-working-why/8468858#8468858 – Emax

47

Nếu bạn muốn vô hiệu hóa tất cả các điều khiển của div, bạn có thể thử thêm một div trong suốt trên div để vô hiệu hóa, bạn sẽ làm cho nó không thể nhấp, cũng sử dụng fadeTo để tạo ra một hình thức vô hiệu hóa.

hãy thử điều này.

$('#DisableDiv').fadeTo('slow',.6); 
$('#DisableDiv').append('<div style="position: absolute;top:0;left:0;width: 100%;height:100%;z-index:2;opacity:0.4;filter: alpha(opacity = 50)"></div>'); 
+0

Giải pháp tuyệt vời .. những gì tôi cần .. cảm ơn .. :) –

+3

Kết hợp nó với bàn phím đàn áp và sao chép/dán sự kiện: 'var stopPropFn = function (e) { \t e.stopPropagation(); \t e.preventDefault(); }; $ ('# DisableDiv'). Bind ("keydown", stopPropFn); $ ('# DisableDiv'). Bind ("nhấn phím", stopPropFn); $ ('# DisableDiv'). Bind ("paste", stopPropFn); ' –

+1

Điều này không ngăn người dùng truy cập liên kết hoặc đầu vào bằng khóa" tab "nơi họ vẫn có thể tương tác với họ. –

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