2010-03-05 11 views
62

Scrivo molto simile al seguente codice. Fondamentalmente commuta un elemento in base ad alcune condizioni.Esiste qualcosa come jQuery.toggle (booleano)?

Nell'esempio seguente, la condizione è "Se la casella di controllo agree è selezionata e il campo name non è vuoto".

$("button").click(function() { 
    if ($("#agree").is(":checked") && $("#name").val() != "") { 
    $("#mydiv").show(); 
    } else { 
    $("#mydiv").hide(); 
    } 
}); 

Vorrei che esistesse una sorta di funzione jQuery che avrebbe funzionato in questo modo.

$("button").click(function() { 
    var condition = $("#agree").is(":checked") && $("#name").val() != ""); 
    $("#mydiv").toggle(condition); 
}); 

C'è qualcosa di simile là fuori? O ci sono altri modi oltre al primo esempio per farlo in un modo meno if-else-ish?

risposta

79

Ok, quindi sono un idiota e necessità di RTM prima di fare domande.

jQuery.toggle() consente di eseguire questa operazione fuori dalla scatola.

$("button").click(function() { 
    var condition = $("#agree").is(":checked") && $("#name").val() != ""); 
    $("#mydiv").toggle(condition); 
}); 
+5

Sei a conoscenza di una versione di questa funzione che supporta l'attenuazione/dissolvenza/scorrimento per la transizione? Questo particolare metodo non sembra, e rende la mia pagina abbastanza veloce in un modo che è più confuso per gli utenti rispetto a una diapositiva gentile. –

+0

Sì è stato aggiunto in jQuery versione 1.4.3. Guarda la pagina della documentazione (http://api.jquery.com/toggle/#toggle2) vedrai che ci sono tre modi per chiamare toggle() che vuoi usare come segue: .toggle ([duration], [ easing], [callback]) – jessegavin

+6

AFAIK non è possibile passare un valore booleano E una durata/attenuazione, ecc. Mi piacerebbe comunque essere corretto. – Galaxy

5

È possibile scrivere autonomamente la funzione.

function toggleIf(element, condition) { 
    if (condition) { element.show(); } 
    else { element.hide(); } 
} 

poi usarlo in questo modo:

toggleIf($("button"), $("#agree").is(":checked") && $("#name").val() != ""); 
8

In primo luogo, vediamo se ho capito quello che si vuole fare in modo corretto ... Si vuole guardare lo stato di una casella di controllo (selezionata o non) e nascondere o mostrare un secondo div in base allo stato di quel valore.

Definire questo stile:

.noDisplay { 
    display:none; 
} 

Utilizzare questa JavaScript:

$("button").click(function() { 
    $("#mydiv").toggleClass("noDisplay", $("#name").val() == ""); 
}); 

La documentazione da jQuery su di esso può essere trovato qui: http://api.jquery.com/toggleClass/

-1

Se toggle() non è buono per voi (ad esempio, perché anima), è possibile scrivere un piccolo plugin per jQuery, in questo modo:

$.fn.toggleIf = function(showOrHide) { 
    return this.each(function() { 
    if (showOrHide) { 
     return $(this).show(); 
    } else { 
     return $(this).hide(); 
    } 
    }); 
}; 

e quindi utilizzarlo in questo modo:

$(element).toggleIf(condition); 
+3

La funzione '$ .toggle()' si anima solo quando si passa un valore di durata come argomento. Se si passa un argomento booleano, questo * non * si anima. Quindi un plugin come questo sarebbe superfluo. Vedi qui: http://jsfiddle.net/qvdsu/ – jessegavin

Problemi correlati