.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>
Ответы
Ответ 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" )