Возможная ошибка в jQuery 1.6 - $().attr(checked) не работает

У меня есть два переключателя в моей форме, и до тех пор, пока я не начал использовать 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, чтобы понять, что я имею в виду. .


person Andrey    schedule 11.05.2011    source источник


Ответы (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 они исправили некоторые из attr проблем 1.6

person Naftali aka Neal    schedule 11.05.2011

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

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

в качестве обходного пути для разных версий.

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

person Xavier Holt    schedule 11.05.2011

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

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

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

По ссылке РК:

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

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

ИЗМЕНИТЬ — добавлено ниже 16 мая 2011 г.

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

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

person Kevin LaBranche    schedule 11.05.2011
comment
Спасибо за использование моего источника? - person Naftali aka Neal; 11.05.2011
comment
@Neal - я хотел сначала указать, что вы ссылаетесь на него. Не лучше ли сослаться на вас вместо того, чтобы просто писать о том, что я сделал, не упоминая, что вы уже это сделали....? Конечно, не имел в виду неуважение. :-) - person Kevin LaBranche; 11.05.2011
comment
лол ок. просто может лучше подойти в качестве комментария, а не полностью new ответа :-p - person Naftali aka Neal; 11.05.2011
comment
@Neal - я уже ответил и добавил к своему ответу цитату, чтобы @Andrey знал, что он может сразу перейти к RC, чтобы решить свою проблему. В вашем ответе этого не было.... :-) Я также поставил вам +1. :-) - person Kevin LaBranche; 11.05.2011
comment
@Нил - Да. Исправлены некоторые проблемы с атрибутами 1.6. Но что и более конкретно в сообщении говорится, что вы можете перейти на 1.6.1 с 1.5.2, чтобы избежать проблем. Я хотел указать на это @Andrey и всем остальным, поскольку это напрямую связано с решением его проблемы. - person Kevin LaBranche; 11.05.2011

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

person Michael Levy    schedule 11.05.2011

Вы можете взломать его следующим образом: jQuery("input[name='test']:checked")

Демо:

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

person Naveed Ahmad    schedule 11.05.2011