2013-05-08 44 views
14

Tôi hiện đang sử dụngKiểm tra nếu hộp kiểm đã được kiểm tra trên tải sử dụng jQuery

$("#some-box").click(function(){ 
    $("#main-box").toggle(); 
    }); 

nào hoạt động tốt, trừ khi hộp kiểm là một phần của một trang mà tiết kiệm tình trạng hộp kiểm. Nếu hộp kiểm được lưu khi được chọn, hộp chính (được hiển thị khi hộp kiểm được nhấp vào) bị ẩn khi tải lại và chỉ hiển thị nếu hộp kiểm được nhấp vào, hộp kiểm hiện tại có nghĩa là hộp kiểm "không được" (như mong đợi chuyển đổi).

Làm cách nào để kiểm tra tải trang nếu hộp kiểm đã được chọn, trong trường hợp nào để kích hoạt tự động chuyển đổi?

Trả lời

25

này nên làm việc:

if ($("#some-box").is(':checked')){ 
    $("#main-box").show(); 
} 
+0

Giải pháp tuyệt vời! Cảm ơn! :) – joryl

1

Sử dụng is(':checked') để kiểm tra và hiển thị các hộp nếu hộp kiểm được kiểm tra:

if ($('#some-box').is(':checked')) { 
    $('#main-box').show(); 
} 

Và sau đó sử dụng bộ xử lý nhấp chuột của bạn như nó vốn có.

+0

Rời này cho đầy đủ, nhưng thấy @ giải pháp Bergi, nó là tốt hơn so với tôi. –

+0

không đọc được. '.toggle()' chấp nhận boolean - http://stackoverflow.com/a/16452070/251311 – zerkms

+0

@zerkms Huh? Tôi không hiểu những gì bạn đang cố gắng nói hoặc những gì liên quan đến câu trả lời của tôi. Có gì không đọc được? Làm thế nào để chuyển đổi chơi vào câu trả lời của tôi? –

5

Bạn có thể nhận trạng thái ban đầu với .attr("checked") hoặc .prop("defaultChecked"). Tuy nhiên, tôi nghĩ rằng đây là một cách tốt hơn:

function update() { 
    $("#main-box")[this.checked ? "hide" : "show"](); 
    // as by @zerkms, this is a different way for writing it: 
    // $("#main-box").toggle(this.checked); 
} 
update.call($("#some-box").click(update)[0]); 

Đối với hầu hết các sự kiện nó rất dễ dàng chỉ cần kích hoạt nó một lần cho khởi động, nhưng điều đó không áp dụng ở đây - chúng tôi không muốn để bấm (và thay đổi) hộp kiểm tự động tải lên.

+0

Tôi thích điều này, nhưng OP có thể không hiểu bạn đang làm gì. Tôi sẽ giải thích việc sử dụng 'call' để thiết lập phạm vi cập nhật khi sử dụng ban đầu. – Paul

4

.toggle() chấp nhận nhà nước - vì vậy bạn có thể vượt qua cho dù để hiển thị hoặc ẩn một yếu tố trên một cuộc gọi cụ thể:

$("#some-box").change(function(){ 
    $("#main-box").toggle($(this).is(':checked')); 
    }); 

$('#some-box').trigger('change'); 

PS: như bạn có thể thấy tôi đang đề xuất sử dụng change sự kiện thay vì click

bản demo online: http://jsfiddle.net/R4Bjw/

+0

Bạn cũng cần phải gọi phương thức một lần khi tải để bắt trạng thái ban đầu. Thêm một '.click()' vào cuối, và điều này sẽ làm việc tuyệt vời (và tôi muốn upvote). –

+0

Đó là, '$ (" # một số hộp "). Bấm (function() {$ (" # main-box "). Toggle ($ (this) .is (': checked'));}). click(); ' –

+0

@BenLee: Trên thực tế, kích hoạt nhấp chuột không được mong muốn ở đây :-) – Bergi

1
(function($) { 
    var $somebox = $('#some-box'), 
     $mainbox = $('#main-box'); 

    var toggleMain = function() { 
     $mainbox.slideToggle(); 
    }; 

    if($somebox.is(':checked')) { 
     toggleMain(); 
    } 

    $somebox.on('click', toggleMain); 
})(window.jQuery); 

Đây là một fiddle: http://jsfiddle.net/FX7Du/4/

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