Кнопки радио и .attr («проверено», «проверено») НЕ работают в IE7 - PullRequest
15 голосов
/ 22 июня 2011

Есть ли способ проверить радио кнопки после добавления в IE7?

То, что работает в каждом браузере, не похоже на то, что оно работает в IE6,7, несмотря на то, что везде я читаю, что я делаю это правильно. Я понятия не имею, почему это не работает.

var $itemVariantRowRadio = $("<input/>")
    .attr("type", "radio")
    .attr("name", "itemvariant")
    .addClass("itemvariant")
    .val('whatever');


    $itemVariantRowRadio.attr('checked', 'checked');
    $itemVariantRow.append($itemVariantRowRadio)

Теперь, если я делаю console.log($itemVariantRowRadio.attr('checked') в IE6 / 7, то он говорит, что он установлен в значение ИСТИНА, но радио фактически не проверяется или не принимается как проверенное.

кошмар! Кто-нибудь еще сталкивался с этим и имел какое-либо исправление?

Ответы [ 4 ]

36 голосов
/ 22 июня 2011

Если в jQuery> = 1.6:

Используйте prop, как показано здесь: .prop () vs .attr ()

$itemVariantRowRadio.prop('checked', true);

Если в jQuery <1.6: </p>

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

ТАКЖЕ:

Попробуйте создать свой элемент так:

var $itemVariantRowRadio = $("<input/>",{
     type: 'radio',
     name: 'itemvariant',
     class: 'itemvariant',
     checked: true,
     value: 'whatever'
});
$itemVariantRow.append($itemVariantRowRadio);

См. Скрипку: http://jsfiddle.net/maniator/6CDf3/
Пример с 2 входами добавлен: http://jsfiddle.net/maniator/6CDf3/2/

4 голосов
/ 22 июня 2011

Попробуйте: $itemVariantRowRadio.not(':checked').click().change();

Таким образом, вы фактически устанавливаете флажок, как если бы вы делали это с помощью мыши. not(':checked') даст вам уверенность, что это еще не было проверено ранее. И затем инициируйте событие изменения, так как jQuery click не делает этого сам по себе.

2 голосов
/ 22 июня 2011

MSIE не позволяет изменять type элемента input после его создания.

См. http://bugs.jquery.com/ticket/1536 и http://api.jquery.com/jQuery/#jQuery2

Просто создайте это так:

$('<input type="radio">')
0 голосов
/ 22 июня 2011

Вам не нужно вызывать событие click, если вы применяете проверенный атрибут после добавления его в dom: http://jsfiddle.net/XjHUe/2/

<div id='content'></div>
var $itemVariantRowRadio = $("<input/>")
    .attr("type", "radio")
    .attr("name", "itemvariant")
    .addClass("itemvariant")
    .val('whatever');
//$itemVariantRowRadio.attr("checked", true);
$("#content").append($itemVariantRowRadio);
$(".itemvariant").attr('checked',true);

var val = $(".itemvariant").attr("checked");
alert(val);
...