Возможная ошибка в jQuery 1.6 - $ (...). Attr ("флажок") не работает - PullRequest
3 голосов
/ 11 мая 2011

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

8 голосов
/ 11 мая 2011

Посмотрите на этот вопрос: .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

3 голосов
/ 11 мая 2011

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

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

в качестве обходного решения.

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

3 голосов
/ 11 мая 2011

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

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 и все будет в порядке ...

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

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

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

0 голосов
/ 12 мая 2011

.attr() и .data() значительно изменились в jQuery 1.6.

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

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

Надеюсь, это поможет.Приветствия

0 голосов
/ 11 мая 2011

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

Демо:

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

0 голосов
/ 11 мая 2011

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

...