2010-03-05 31 views
62

Aşağıdaki kodlara çok benzer bir şey yazarım. Temelde bir öğeye bağlı olarak bir öğeyi değiştirir.jQuery.toggle (boolean) gibi bir şey var mı?

Aşağıdaki örnekte, "agree onay kutusu işaretliyse ve name alanı boş değil" durumudur.

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

Böyle çalışacak jQuery işlevi bir çeşit olsaydı.

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

Orada böyle bir şey var mı? Ya da daha az if-else-ish yolunda bunu yapmak için ilk örnek dışında başka yolları var mı?

cevap

79

Ok, ben bir aptalım ve soru sormadan önce RTM'ye ihtiyacım var.

jQuery.toggle() bunu kutunun dışında yapmanıza olanak tanır.

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

Bu işlevin, geçiş için yavaşlama/solma/kaymayı destekleyen bir sürümünü biliyor musunuz? Bu özel yöntem görünmüyor ve sayfamı, kullanıcılara daha yumuşak bir slayttan ziyade kafa karıştırıcı bir şekilde oldukça hızlı bir şekilde atlatıyor. –

+0

Evet, jQuery sürüm 1.4.3'e eklendi. Belge sayfasına bakın (http://api.jquery.com/toggle/#toggle2), aşağıdakileri kullanmak için toggle() yöntemini çağırmanın üç yolu olduğunu göreceksiniz: .toggle ([duration], [ gevşeme], [geri dönüş]) – jessegavin

+6

AFAIK bir boole AND geçiremezsiniz/süre, vb. – Galaxy

5

Bu işlevi kendiniz yazabilirsiniz.

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

Sonra bu gibi kullanmak: İlk

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

, ben doğru ne yapmak istediğini anlarsanız kontrol (Bir onay kutusu durumuna bakmak istiyorum ... görelim ya değil) ve o değerin durumuna göre ikinci bir div gösterme veya gösterme.

.noDisplay { 
    display:none; 
} 

kullanın bu JavaScript:

bu stili tanımlayın

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

üzerinde jQuery gelen belgeler burada bulunabilir: http://api.jquery.com/toggleClass/

-1

toggle() size (örneğin o canlandıran çünkü), bu gibi küçük jQuery eklentisi, yazabilir için iyi değilse:

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

ve sonra bu gibi kullanmak:

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

'$ .toggle()' işlevi yalnızca bir argüman olarak bir süre değerini ilettiğinizde canlandırır. Bir boole argümanını iletirseniz, * * canlandırmaz. Yani böyle bir eklenti gereksiz olurdu. Buraya bakın: http://jsfiddle.net/qvdsu/ – jessegavin

İlgili konular