#javascript #jquery #radio-button
#javascript #jquery #переключатель
Вопрос:
Переход с jQuery 1.4.4 на jquery 1.6.4 привел к нарушению моего кода, связанного с radiobuttonlist.
Вот пример кода и шаги для воспроизведения странного поведения:
Шаги для воспроизведения:
1: Радио A уже выбрано.
2. Выберите радио B
3. Введите что-нибудь в текстовое поле и выделите вкладку.
Вы увидите: A проверяется, а B проверяется.
Итак, что именно изменилось с 1.6.4 на 1.4.4, что вызывает его сбой?
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.6.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
function txtchanged(tb) {
$(".rbl").find("input[type='radio']").each(function () {
alert($(this).val() " " $(this).attr("checked"));
});
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:RadioButtonList ID="RadioButtonList1" runat="server" CssClass="rbl">
<asp:ListItem Text="A" Value="A" Selected="True" />
<asp:ListItem Text="B" Value="B" />
</asp:RadioButtonList>
<asp:TextBox ID="tb" runat="server" CssClass="tb" onblur="txtchanged(this)"></asp:TextBox>
</form>
</body>
</html>
Ответ №1:
Цитата OP:
Итак, что именно изменилось с 1.6.4 на 1.4.4, что вызывает его сбой?
Переключатель checked
— это не атрибут, это свойство. jQuery был обновлен в версии 1.6, чтобы исправить эту семантическую ошибку.
Измените это…
.attr("checked")
к этому…
.prop("checked")
ПРАВКИ:
Что касается комментария OP о том, почему jQuery не является обратно совместимым:
1) Это добавило бы к коду накопление наворотов.
2) Быть «обратно совместимым» было бы практически то же самое, что вообще не устранять эту проблему.
Смотрите эту страницу, чтобы прочитать примечания к выпуску для каждой версии jQuery.
Также измените это…
.removeAttr('checked')
к этому…
.removeProp('checked')
Комментарии:
1. да, я понял это, но тогда вопрос в том, что мне нужно будет найти и изменить все такие экземпляры и убедиться, что больше ничего не сломается. Почему это не совместимо с обратной связью. Я даже заметил, что removeAttr(‘checked’) в моем коде также облажался при использовании 1.6.4.
2. @gbs, смотрите мой обновленный ответ. Вы задаете только один очень конкретный вопрос, и я ответил на него правильно. Ваш последующий вопрос заключается в том, почему многие люди придерживаются своей текущей версии jQuery. Я не могу знать, какие другие экземпляры или ситуации могут сломаться на вашем конкретном сайте, но перейдите по ссылке , которую я разместил, чтобы прочитать о том, что еще изменилось с версии 1.4.4.