Выберите радиоуправление из Javascript

У меня есть группа из двух радиоуправлений asp, и я хочу выбрать один из них для обратной передачи ajax. Я могу поставить точки останова и сказать, что код срабатывает, но ничего не происходит. Я пробовал 5-10 разных вариантов, но ничего не работает. Бит .css должен был проверить, могу ли я найти правильный элемент управления и что он работает. CSS применяется.

Я пробовал .trigger("click") , а также attr(checked="checked" and true). Пробовал все, что мог найти в Google. Но второй вариант не проверяется.

 $("[main=true]").Checked = true;
 $("[main=true]").css("background-color", "yellow");

HTML

<asp:RadioButton GroupName="Complete" runat="server" Text="Yes" Checked="true" />
<asp:RadioButton GroupName="Complete" runat="server" Text="No" main="true" /><br />

Еще одна незначительная проблема, с которой я столкнулся, заключается в том, что если я нажму на слова «Да» или «Нет», оба поля выбора не будут выбраны. Любая причина для этого?

        $(window).load(function () {
        $("[main=false]").prop('checked', false);
        $("[main=true]").prop('checked', true);
        $("[main=true]").prop('checked', true);
        $("[main=true]").attr('checked', true);
        $("[main=true]").Checked = true;
        $("[main=true]").css("background-color", "yellow");
        var id = localStorage.getItem("CustomerID");
        $('img[alt = "' + id + '"]').trigger("click");
        localStorage.clear();
    });

Вывод HTML

 <span>Mark as complete:</span><span main="false">
 <input id="gvCustomers_ctl07_0" type="radio" name="gvCustomers$ctl02   $Complete" value="ctl07" checked="checked" />
   <label for="gvCustomers_ctl07_0">Yes</label>
  </span><span main="true"><input id="gvCustomers_ctl08_0" type="radio"     name="gvCustomers$ctl02$Complete" value="ctl08" />
      <label for="gvCustomers_ctl08_0">No</label></span>

Кстати, есть более одного радиоуправления с основным атрибутом, установленным в true, но я хочу, чтобы все они были выбраны. Не уверен, что это имеет значение. Что не имеет смысла, так это то, что применяется CSS.


person SANM2009    schedule 26.12.2017    source источник
comment
$("[main=true]").Checked = true; должно быть $("[main=true]").prop('checked', true);   -  person A. Wolff    schedule 26.12.2017
comment
Тоже пробовал, не работает.   -  person SANM2009    schedule 26.12.2017
comment
Так что ваша проблема исходит из другого места. Мы не знаем, как вы пытаетесь вызвать этот код. А как рендерится <asp:RadioButton GroupName="Complete" runat="server" Text="No" main="true" /> на стороне клиента?   -  person A. Wolff    schedule 26.12.2017
comment
JS запускается при загрузке страницы. Я добавил полную функцию.   -  person SANM2009    schedule 26.12.2017
comment
stackoverflow.com/ вопросы/5577238/   -  person Shafiqul Islam    schedule 26.12.2017
comment
Попробуйте это $("[main=true]").attr('checked', true).trigger('change');   -  person Subash    schedule 26.12.2017
comment
Измените селекторы $("[main=false] input[type=radio]").prop('checked', false); и $("[main=true] input[type=radio]").prop('checked', true); Вот Пример JsFiddle   -  person NewToJS    schedule 26.12.2017
comment
Спасибо, newToJS, пока ничего.   -  person SANM2009    schedule 26.12.2017
comment
@ SANM2009 проверьте, вы проверили консоль браузера на наличие ошибок?   -  person NewToJS    schedule 26.12.2017
comment
Используйте .attr("checked", "checked") вместо .attr(checked="checked"). И попробуйте сбросить другой переключатель, прежде чем делать это.   -  person Alexander    schedule 26.12.2017
comment
Что такое атрибут main? в спецификации не увидел..   -  person Alexander    schedule 26.12.2017
comment
Это настраиваемый атрибут, который я использовал для идентификации элементов управления. Поскольку имя и идентификатор изменяются при загрузке страницы (элементы управления находятся в элементе шаблона gridview)   -  person SANM2009    schedule 26.12.2017


Ответы (1)


У меня есть путаница, как HTML может быть

<asp:RadioButton GroupName="Complete" runat="server" Text="Yes" Checked="true" />

Насколько мне известно, независимо от того, какой язык программирования вы используете, он сначала преобразуется в HTML, а затем отображается в браузере.

Насколько я могу предположить, ваш код будет преобразован в

<input name='Complete' type='radio'  checked='true'></input>
<input name='Complete' type='radio' main='true'></input>

Очень простым и наивным решением вашей проблемы будет

var elemArray=document.getElementsByName("Complete");
elemArray[0].checked=true;//For 1 radio
elemArray[1].checked=true; //For 2 radio

или вы можете просто перебрать массив элементов

for(i=0;i<elem.length;i++){
if(elem[i].hasAttribute('main')){
elem[i].checked=true;//if the second element do not have any main attribute
//or
if(elem[i].main='true'){
elem[i].checked=true;
}
}
}
person Jatin Asija    schedule 26.12.2017
comment
Извините, я немного старомоден. Я имею в виду файл asp, а не код. - person SANM2009; 26.12.2017
comment
Не думаю, что это сработает, элементы управления динамически дублируются, поэтому я использую пользовательский атрибут main, чтобы найти их. - person SANM2009; 26.12.2017
comment
Не имеет значения, генерируются ли элементы динамически или уже существуют, если элемент присутствует, когда вы будете запускать функцию для выбора одного из них, и я также предоставил решение с основным атрибутом. - person Jatin Asija; 26.12.2017
comment
Я думаю, вы также должны предоставить сгенерированный HTML-код, который наверняка поможет всем остальным устранить ошибку. - person Jatin Asija; 26.12.2017
comment
Джатин, HTML прилагается. Спасибо за комментарий, кажется, я вижу проблему. Основной атрибут становится диапазоном вне элемента управления вводом. Что объясняет, почему применяется css. Я думаю, что мне нужно .(следующий) в моем коде. - person SANM2009; 26.12.2017
comment
Jatin, Вывод в формате HTML прилагается выше. Спасибо за комментарий, кажется, я вижу проблему. Основной атрибут становится диапазоном вне элемента управления вводом. Что объясняет, почему применяется css. Я думаю, что мне нужно .next() в моем коде. - person SANM2009; 26.12.2017
comment
да, но мне это не кажется очень хорошим вариантом, потому что создание ‹span › неясно или неизвестно, что вы можете сделать, так это включить переключатели в div, а затем использовать дочерний селектор в этом div, или, может быть, если возможно, сделайте имена переключателей фиксированными, если необходимо внести какие-то изменения, динамически используйте для этого атрибут id. - person Jatin Asija; 27.12.2017