2010-03-05 12 views
62

Dużo piszę coś podobnego do poniższego kodu. Zasadniczo przełącza element na podstawie pewnych warunków.Czy istnieje coś takiego jak jQuery.toggle (boolean)?

W poniższym przykładzie, warunek jest następujący: "Jeśli pole wyboru agree jest zaznaczone, a pole name nie jest puste".

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

Żałuję, że nie było jakiejś funkcji jQuery, która działałaby w ten sposób.

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

Czy jest coś takiego? Czy istnieją inne sposoby oprócz pierwszego przykładu, aby to zrobić w sposób mniejszy niż if-else-ish?

Odpowiedz

79

Ok, więc jestem idiotą i potrzebuję RTM, zanim zadaję pytania.

jQuery.toggle() pozwala to zrobić po wyjęciu z pudełka.

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

Czy znasz wersję tej funkcji, która obsługuje łagodzenie/zanikanie/przesuwanie w celu przejścia? Ta szczególna metoda nie wydaje się, i sprawia, że ​​moja strona przeskakuje dość szybko w sposób, który jest bardziej mylący dla użytkowników niż delikatny slajd. –

+0

Tak, to zostało dodane w wersji jQuery 1.4.3. Spójrz na stronę dokumentacji (http://api.jquery.com/toggle/#toggle2), zobaczysz, że istnieją trzy sposoby wywołania toggle(), które chcesz użyć: .toggle ([duration], [ easing], [callback]) – jessegavin

+6

AFAIK nie można przekazać wartości boolowskiej ORAZ czasu trwania/złagodzenia itp. Chciałbym jednak sprostować. – Galaxy

5

Możesz napisać tę funkcję samodzielnie.

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

następnie używać go tak:

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

pierwsze, pozwala zobaczyć, czy rozumiem, co chcesz zrobić prawidłowo ... Chcesz spojrzeć na stan pole wyboru (zaznaczone lub nie) i ukryj lub pokaż drugi dział na podstawie stanu tej wartości.

Zdefiniuj ten styl:

.noDisplay { 
    display:none; 
} 

Użyj tego JavaScript:

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

Dokumentacja z jQuery na niej można znaleźć tutaj: http://api.jquery.com/toggleClass/

-1

Jeśli toggle() nie jest dobre dla ciebie (np ponieważ ożywia), można napisać mały jQuery plugin, na przykład:

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

a następnie wykorzystać go tak:

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

Funkcja '$ .toggle()' animuje się tylko wtedy, gdy jako argument zostanie podana wartość czasu trwania. Jeśli przekazujesz argument boolean, robi się * nie * animate. Tak więc taka wtyczka byłaby zbyteczna. Zobacz tutaj: http://jsfiddle.net/qvdsu/ – jessegavin

Powiązane problemy