Commish13 Ответов: 1

Проверка Jquery не работает с моим ASP.NET главная страница


Я пытаюсь использовать проверку jQuery на моей странице ASP.NET которая использует главную страницу. Всякий раз, когда я использую этот код без главной страницы, он отлично работает. Но с главной страницей это не работает. Единственное отличие между ними заключается в том, что без главной страницы имя группы остается неизменным при отображении веб-страницы. name="Game_1" с главной страницы он меняется на name="ctl00$ContentPlaceHolder1$Game_1"

Я попытался использовать оба этих имени выше в своем jQuery, но это все равно не работает. Я также попробовал 2 разных кода jQuery, но ни один из них не работает.

Кроме того, мои переключатели находятся внутри ретранслятора. На моем сайте у меня есть 17 пар переключателей, но я не думал, что нужно помещать весь этот код сюда.

Любая помощь будет оценена по достоинству. Спасибо

Что я уже пробовал:


&ЛТ;АСП:переключатели идентификатор="radBears" атрибут runat="сервер" текст="медведей" группы="Game_1" CssClass="рнд" /&ГТ;

&ЛТ;АСП:переключатели идентификатор="radRaiders" атрибут runat="сервер" текст="рейдеров" Имя_группы="Game_1" CssClass="рнд" /&ГТ;

&ЛТ;АСП:CustomValidator идентификатор="CustomValidator1" атрибут runat="сервер" требуется сообщение об ошибке="выбор" ClientValidationFunction = "ValidateRadioButton1" /&ГТ;


&ЛТ;АСП:переключатели идентификатор="radChargers" атрибут runat="сервер" текст="зарядные устройства" Имя_группы="Game_2" CssClass="рнд" /&ГТ;
&ЛТ;АСП:переключатели идентификатор="radCowboys" атрибут runat="сервер" текст="ковбоев" Имя_группы="Game_2" CssClass="рнд" /&ГТ;

&ЛТ;АСП:CustomValidator идентификатор="CustomValidator2" атрибут runat="сервер" требуется сообщение об ошибке="выбор" ClientValidationFunction = "ValidateRadioButton2" /&ГТ;


&ЛТ;АСП:кнопка ID="кнопка 1" атрибут runat="сервер" текст="отправить" /&ГТ;

<script src="Scripts/jquery-3.3.1.min.js">


функция ValidateRadioButton1(отправитель, args) {
параметр args.IsValid = $("[name=Game_1]:checked").длина > 0;
}

функция ValidateRadioButton2(отправитель, args) {
параметр args.IsValid = $("[name=Game_2]:checked").длина > 0;
}



Я тоже попробовал это сделать:



функция ValidateRadioButton(отправитель, args) {
var repeater = document.getElementById("<%= myRepeater.ClientID %>");
ВАР пользования = повторитель.метод getelementsbytagname('ввод');
для (var i = 0; i < items.длина; i++) {
if (items[i].type == "радио") {
if (items[i].checked) {
параметр args.IsValid = true;
вернуть;
}
еще {
параметр args.IsValid = false;
}
}
}
}

1 Ответов

Рейтинг:
1

Richard Deeming

Вы можете использовать jQuery $= чтобы найти элементы, где атрибут заканчивается указанной строкой:

function ValidateRadioButton1(sender, args) {
    args.IsValid = $("input[name$='Game_1']:checked").length > 0;
}

Атрибут заканчивается селектором [name$=”value”] | jQuery API Documentation[^]

NB: Если вы используете элемент управления с привязкой к данным, все будет сложнее. Вам, вероятно, понадобится элемент программы-оболочки, которые содержит пар кнопок радио-и пользовательский валидатор:
<ItemTemplate>
    <div class="rb-wrapper">
        <asp:RadioButton ID="radBears" runat="server" Text="Bears" GroupName="Game_1" CssClass="rnd" />
        <asp:RadioButton ID="radRaiders" runat="server" Text="Raiders" GroupName="Game_1" CssClass="rnd" />
        <asp:CustomValidator runat="server" ErrorMessage="Selection is required" ClientValidationFunction="ValidateRadioButtonList" />
    </div>
</ItemTemplate>
Затем вам нужно будет найти ближайший контейнер к валидатору и найти проверенный элемент в этом контейнере:
function ValidateRadioButtonList(sender, args) {
    args.IsValid = $(sender).closest(".rb-wrapper").find("input:radio:checked").length > 0;
}


Commish13

Спасибо. Я получил решение с контейнером, чтобы работать. Если вы не возражаете, не могли бы вы показать мне, как это сделать с петлей? Как я уже сказал, У меня есть 17 комплектов переключателей.

Richard Deeming

Что-то вроде этого должно сработать:

function ValidateRadioButton(sender, args) {
    args.IsValid = true;
    
    $(".rb-wrapper").each(function(){
        if ($(this).find("input:radio:checked").length === 0) {
            args.IsValid = false;
            return false;
        }
    });
}

Commish13

С помощью этого цикла мое сообщение об ошибке отображается с установленным переключателем или без него

Richard Deeming

Сообщение об ошибке должно появиться только в том случае, если один из элементов оболочки не содержит проверенного радиобаттона. Если вы выберете опцию в каждом элементе, проверка должна пройти.

Commish13

Если вы получаете сообщение об ошибке в каждой ситуации. 1 или обе переключатели проверены и когда 1 или обе не проверены

Richard Deeming

Как я уже сказал, валидатор будет отображать ошибку только в том случае, если она есть хотя бы одна rb-wrapper элемент, который не содержит проверяемого радиобаттона.

Или отладить код JavaScript, или добавить некоторые console.debug вызывает функцию и смотрит на вывод в консоли разработчика:

function ValidateRadioButton(sender, args) {
    args.IsValid = true;
    
    $(".rb-wrapper").each(function(){
        if ($(this).find("input:radio:checked").length === 0) {
            console.debug("ValidateRadioButton", "No option selected here -->", this, $(this).find("input:radio"));
            args.IsValid = false;
            return false;
        }
    });
    
    console.debug("ValidateRadioButton", args.IsValid);
}

Commish13

Спасибо за вашу помощь, я заставил его работать благодаря вашей помощи