Возможная ошибка в jQuery 1.6 - $(...). Attr("флажок") не работает

У меня есть две радиокнопки в моей форме, и до тех пор, пока я не начал использовать jQuery 1.6, следующий код работал нормально:

<input type="radio" id="radio1" name="test"/>
<input type="radio" id="radio2" name="test"/>
<input type="button" onclick="testcheck()" value="Test"/>
<script>
function testcheck()
{
    if (jQuery("#radio1").attr("checked"))
        alert("first button checked");
    else if (jQuery("#radio2").attr("checked"))
        alert("second button checked");
    else
        alert("none checked")      
}
</script>

Как только я начинаю использовать jQuery 1.6, он всегда показывает "ни один не проверен", потому что jQuery(radiobutton).attr("checked") всегда пусто

Взгляните на этот jsfiddle и измените версию jQuery между 1.5.2 и 1.6, чтобы понять, что я имею в виду.

6 ответов

Решение

Посмотрите на этот вопрос: .prop () vs.attr ()

Попробуйте это для своего кода:

function testcheck()
{
    if (jQuery("#radio1").prop("checked"))
        alert("first button checked");
    else if (jQuery("#radio2").prop("checked"))
        alert("second button checked");
    else
        alert("none checked")      
}

Также в новейшем jQuery 1.6.1 они исправили некоторые из 1.6 attr проблемы

Я тоже это видел. Другие ответы имеют некоторое представление о том, почему это так, и когда это будет отменено (только для получателей?); в то же время я использую

$('#thingy').is(':checked');

как обходной вариант кросс-версии.

Надеюсь это поможет!

Это не ошибка, а изменение:

http://christierney.com/2011/05/06/understanding-jquery-1-6s-dom-attribute-and-properties/

Кроме того, как упомянул @Neal, они немного поработали над этим в последней версии 1.6.1.

Из ссылки RC:

Обновление с 1.5.2 до 1.6.1 - С появлением нового метода.prop() и изменений в методе.attr() jQuery 1.6 вызвал дискуссию о разнице между атрибутами и свойствами и о том, как они связаны с каждым из них. Другой. Это также сопровождалось некоторыми проблемами обратной совместимости, которые были исправлены в 1.6.1. При обновлении с 1.5.2 до 1.6.1 вам не нужно менять какой-либо код.

Там гораздо больше объяснений, но вы можете перейти к 1.6.1 и все будет в порядке...

РЕДАКТИРОВАТЬ - Добавлено ниже 16.05.11

Джон Резиг просто взвесил изменения, внесенные в этот список, и почему...

http://ejohn.org/blog/jquery-16-and-attr/

Я не могу объяснить изменение между версиями, но есть селектор, специально ищущий проверенный - http://api.jquery.com/checked-selector/

Вы можете взломать это так: jQuery("input[name='test']:checked")

Демо:

http://jsfiddle.net/8Eqpu/15/

.attr() а также .data() резко изменились в JQuery 1.6.

Это лучше объяснено в этой статье:

Обновление до jQuery 1.6: проблемы, с которыми вы можете столкнуться

Надеюсь это поможет. ура

Другие вопросы по тегам