2013-05-08 8 views
14

Attualmente sto usandoControllare se casella di controllo è già selezionata al carico utilizzando jQuery

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

che funziona bene, tranne quando la casella di controllo è parte di una pagina che salva lo stato caselle di controllo. Se una casella di controllo viene salvata come spuntata, la casella principale (che viene rivelata quando si fa clic sulla casella di controllo) è nascosta in ricarica ed è visibile solo se si fa clic sulla casella di controllo, che ora significa casella di controllo "non selezionato" (come previsto con l'interruttore).

Come posso controllare il caricamento della pagina se la casella è già spuntata, nel qual caso attivare il commutatore automaticamente?

risposta

25

questo dovrebbe funzionare:

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

Ottima soluzione! Grazie! :) – joryl

1

Usa is(':checked') per testare e mostrare la casella se la casella è selezionata:

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

e quindi utilizzare il gestore click così come sono.

+0

Lasciando questo per completezza, ma vedere @ soluzione Bergi, è migliore della mia. –

+0

è illeggibile. '.toggle()' accetta boolean - http://stackoverflow.com/a/16452070/251311 – zerkms

+0

@zerkms Huh? Non capisco cosa stai cercando di dire o cosa è rilevante per la mia risposta. Cosa è illeggibile? Come si attiva la riproduzione nella mia risposta? –

5

È possibile ottenere lo stato iniziale con .attr("checked") o .prop("defaultChecked"). Tuttavia, penso che il seguente è un modo migliore:

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]); 

Per la maggior parte degli eventi è facile innescare solo una volta per l'inizializzazione, ma che non si applica qui - noi non vogliamo fare clic su (e il cambiamento) la casella di controllo automaticamente onload.

+0

Mi piace questo, ma il OP potrebbe non capire quello che stai facendo. Spiegherei l'uso di 'call' per impostare l'ambito di aggiornamento sull'utilizzo iniziale. – Paul

4

.toggle() accetta lo stato - così si potrebbe passare se mostrare o nascondere un elemento in una particolare chiamata:

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

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

PS: come si può vedere che sto proponendo di usare change evento invece di click

demo in linea: http://jsfiddle.net/R4Bjw/

+0

È inoltre necessario chiamare il metodo una volta al caricamento per rilevare lo stato iniziale. Aggiungi un '.click()' alla fine, e questo funzionerà alla grande (e farei l'uptote). –

+0

Cioè, '$ (" # some-box "). Click (function() {$ (" # main-box "). Toggle ($ (this) .is (': checked'));}). click(); ' –

+0

@BenLee: In realtà, l'attivazione di un clic non è desiderata qui :-) – 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); 

Ecco un violino: http://jsfiddle.net/FX7Du/4/

Problemi correlati