.prop ('işaretlendi', yanlış) veya .removeAttr ('işaretlendi')?


115

Prop yönteminin tanıtılmasıyla, şimdi bir onay kutusunun işaretini kaldırmanın kabul edilen yolunu bilmem gerekiyor. Bu mu:

$('input').filter(':checkbox').removeAttr('checked');

veya

$('input').filter(':checkbox').prop('checked',false);

4
John Resig'in gönderisini okudunuz mu? ejohn.org/blog/jquery-16-and-attr
Jared Farrish

Yanıtlar:


130

jQuery 3

JQuery 3 itibariyle removeAttrgelmez değil tekabül özelliğini ayarlayın falseartık:

Kullanarak, jQuery 3.0 öncesinde .removeAttr()bir boolean özniteliği üzerinde gibi checked, selectedya readonlyda tekabül adında özelliğini ayarlayın olurdu false. Bu davranış, Internet Explorer'ın eski sürümleri için gerekliydi ancak modern tarayıcılar için doğru değildir çünkü öznitelik başlangıç ​​değerini ve özellik geçerli (dinamik) değeri temsil eder.

.removeAttr( "checked" )Bir DOM öğesinde kullanmak neredeyse her zaman bir hatadır . Bunun yararlı olabileceği tek zaman, DOM'un daha sonra bir HTML dizesine geri serileştirilmesidir. Diğer tüm durumlarda .prop( "checked", false )bunun yerine kullanılmalıdır.

Değişiklikler

Bu nedenle, yalnızca .prop('checked',false)bu sürümü kullanırken doğru yoldur.


Orijinal cevap (2011'den itibaren):

Temel boole özelliklerine sahip öznitelikler için (bunlardan checkedbiri), removeAttrtemel alınan özelliği otomatik olarak olarak ayarlar false. (Bunun jQuery 1.6.1'de eklenen geriye dönük uyumluluk "düzeltmeleri" arasında olduğunu unutmayın).

Yani, ya işe yarayacak ... ama verdiğiniz ikinci örnek (kullanarak prop) ikisinden daha doğru olanı. Amacınız onay kutusunun işaretini kaldırmaksa, özniteliği değil gerçekten özelliği etkilemek istersiniz ve removeAttrbunu yapmak için herhangi bir işlem yapmanıza gerek yoktur .


36
@tandu: Yapabilirsin , ama yapmamalısın. Dokümanlardan: " Not:removeProp() İşaretli, devre dışı bırakılmış veya seçili gibi yerel özellikleri kaldırmak için [ ] kullanmayın . Bu, özelliği tamamen kaldırır ve kaldırıldıktan sonra öğeye tekrar eklenemez. .prop()Bu özellikleri false olarak ayarlamak için kullanın yerine." removePropgerçekten yalnızca özel özelliklerle kullanılmak üzere tasarlanmıştır.
John Flatness

17

use checked: onay kutusunun true, false özelliği.

jQuery:

if($('input[type=checkbox]').is(':checked')) {
    $(this).prop('checked',true);
} else {
    $(this).prop('checked',false);
}

Eğer, yoksa bir satır kullanarak, $ (this) .prop ('işaretli', $ ('input [tür = onay kutusu]'). İs (': kontrol edilmiş'));
Yusuf Hassan

8

Hem prop hem de attr kullanmanızı tavsiye ederim çünkü Chrome ile ilgili problemlerim vardı ve her iki işlevi kullanarak da çözdüm.

if ($(':checkbox').is(':checked')){
    $(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
    $(':checkbox').prop('checked', false).removeAttr('checked');
}

Evet, krom için şunu kullanın: $("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
Çubuk

Giriş radyosunu ve onay kutusunu değiştirmek için özel bileşen (CSS + JS) kullanıyorum. Benim için işe yarayan tek yol bu. Teşekkürler!
Silvio Delgado

3

Aynı şeyi yapmanın başka bir alternatifi de type = checkbox niteliğine göre filtrelemektir :

$('input[type="checkbox"]').removeAttr('checked');

veya

$('input[type="checkbox"]').prop('checked' , false);

Öznitelikler ve özellikler arasındaki farkın belirli durumlarda önemli olabileceğini unutmayın. JQuery 1.6'dan önce , .attr () yöntemi bazen bazı öznitelikleri alırken özellik değerlerini hesaba katıyordu ve bu da tutarsız davranışlara neden olabilirdi. JQuery 1.6'dan itibaren, .prop () yöntemi özellik değerlerini açıkça almak için bir yol sağlarken .attr () öznitelikleri alır.

Daha fazlasını öğrenin ...


2
Soru "Bunlardan hangisi daha doğru" idi, "Bunu yapmanın başka yolları var mı?" Değil. Soruyu cevaplamaya çalışmamış görünüyorsunuz
Andrew Stubbs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.