2016-06-29 3 views
1

Пожалуйста, проверьте следующий вывод консоли, обратите внимание, что первый вход проверил атрибут и выбран:JQuery: проверено не работаешь с вводом начальных (атрибут HTML) радио

enter image description here

Вы можете видеть, у меня есть 2 радио input s, 1 checked, однако ни селектор, ни prop, ни is не работают. Код работает правильно, если я вручную нажму на одно из радио. Вот мой HTML:

<div class="col-sm-6"> 
    Type: 
    <div class="btn-group" data-toggle="buttons"> 
     <label class="btn btn-default active"> 
      <input type="radio" name="generator-type" id="opt-type-passphrase" value="0" autocomplete="off" checked> 
      Passphrase 
     </label> 
     <label class="btn btn-default"> 
      <input type="radio" name="generator-type" id="opt-type-password" value="1" autocomplete="off"> 
      Password 
     </label> 
    </div> 
</div> 

Почему код не работает, когда страница загружается, когда я не нажал никакое радио? Есть ли способ исправить это?

EDIT: Нашел проблему, у меня есть этот код в загрузке страницы:

 $("input[name='generator-type'][value=" + this.Options.Type + "]").prop("checked", ""); 

Правильное решение с помощью:

.prop("checked", true) 

Но может кто-нибудь объяснить, как это работает? Почему существует атрибут checked, но функция prop по-прежнему ложна?

+0

@HectorBarbossa Спасибо, я нашел источник проблемы, но до сих пор не понимаю, как работают 'prop' и' is'. Не могли бы вы объяснить это? –

+1

Ваш вопрос относительно того, как это работает, описан в [документации] (http://api.jquery.com/prop/). Один ключевой аспект: атрибут HTML устанавливает только * начальное значение свойства. Если он изменяется с помощью кода или взаимодействия с пользователем, HTML не изменяется, но свойство делает. –

ответ

1

Вы должны проверить, как этот

$(...).is(':checked') 

Почему? Поскольку метод jquery is принимает селектор css, который он использует для фильтрации согласованных в данный момент элементов.

Таким образом, temp.is('checked') будет иметь значение только в том случае, если элементы temp имеют тег checked. В вашем случае они имеют тег input, поэтому не совпадают.

Использование совпадений :checked на псевдо-селекторе css для проверки того, установлен ли текущий элемент или нет. Это то, что вы хотите.

Зная это, вы также можете использовать $(...).is('[checked]'), который вернет true, если соответствующие элементы имеют атрибут checked. Вероятно, это то, что вы пытались сделать изначально. Хотя, обычным способом является использование :checked.

+0

Хороший улов. Обновлено. – asemahle

3

Попробуйте .is(':checked') вместо .is('checked'). Пожалуйста, проверьте это Fiddle.

1

Вы пропустили двоеточие в это проверено код:

temp.is(":checked") 

вместо

temp.is("checked") 
+0

Как это отличается от существующего ответа? –

Смежные вопросы