Подтвердить что ты не робот

.attr('checked', 'checked') не работает

Я пытаюсь проверить радио. Ни одно из следующих работ:

[править]

$('selector').attr('checked','checked');
$('selector').attr('checked',true);

Два предупреждения() в следующем коде показывают "1" и "a" соответственно. Мое ожидание - второе предупреждение(), показывающее "b".

Opera проверяет второе поле в своем браузере, но его инспектор элементов, стрекоза, показывает, что DOM не изменен.

[end edit]

Я прочитал FAQ, прежде чем я разместил этот вопрос:

http://docs.jquery.com/Frequently_Asked_Questions#How_do_I_check.2Funcheck_a_checkbox_input_or_radio_button.3F

Помощи будут очень благодарны!

ТИА

Следующая страница и код xhtml:

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Weird Behavior</title>
<script type="text/javascript" src="scripts/jquery.js"/>
<script type="text/javascript">
function clickme(){
    alert($('input[name="myname"][value="b"]').length);
    $('input[name="myname"][value="b"]').attr('checked','checked');
    $('#b').attr('checked',true);
    alert($('input[name="myname"][checked]').val());
};
</script>
</head>
<body>
    <form action="">
        <fieldset>
            <legend>Why check is not switched?</legend>
            <input type="radio" name="myname" value="a" id="a" checked="checked"/>A
            <input type="radio" name="myname" value="b" id="b"/>B
        </fieldset>
    </form>
    <p>
    <button type="button" onclick="clickme()">click me</button>
    </p>
</body>
</html>
4b9b3361

Ответ 1

С jQuery никогда не используйте встроенный onclick javascript. Держите его ненавязчивым. Сделайте это вместо этого и полностью удалите onclick.

Также обратите внимание на использование псевдоселектора :checked в последней строке. Причина этого заключается в том, что после загрузки страницы html и фактическое состояние элемента формы могут быть разными. Откройте веб-инспектор, и вы можете нажать на другой переключатель, и HTML все равно покажет, что первый из них отмечен. Селектор :checked вместо этого фильтрует элементы, которые на самом деле проверены, независимо от того, что начал html как.

$('button').click(function() {
    alert($('input[name="myname"][value="b"]').length);
    $('input[name="myname"][value="b"]').attr('checked','checked');
    $('#b').attr('checked',true);
    alert($('input[name="myname"]:checked').val());
});

http://jsfiddle.net/uL545/1/

Ответ 2

 $('.checkbox').attr('checked',true);

будет не работать с jQuery 1.6.

Вместо этого используйте

$('.checkbox').prop('checked',true);
$('.checkbox').prop('checked',false);

Ответ 3

$('.checkbox').prop('checked',true); 
$('.checkbox').prop('checked',false);

... отлично работает с jquery1.9.1

Ответ 4

Почему бы не попробовать IS?

$('selector').is(':checked') /* result true or false */

Посмотрите FAQ: jQuery.is() enjoin us; -)

Ответ 5

Я не думаю, что вы можете позвонить

$.attr('checked',true);

потому что вначале нет селектора элементов. $должно следовать $('selector_name'). GOOD удачи!

Ответ 6

Он работает, но

$('input[name="myname"][checked]').val()

вернет значение первого элемента с атрибутом checked. А переключатель a все еще имеет этот атрибут (и он приходит до кнопки b). Выбор b не удаляет атрибут checked из a.

Вы можете использовать jQuery :checked:

$('input[name="myname"]:checked').val()

DEMO


Дальнейшие примечания:

  • Использование $('b').attr('checked',true); достаточно.
  • Как уже упоминалось, не используйте встроенные обработчики событий, используйте jQuery для добавления обработчика событий.

Ответ 7

$("input:radio").attr("checked",true); //for all radio inputs

или

$("your id or class here").attr("checked",true); //for unique radios

одинаково работает для ( "checked", "checked" )