2010-12-09 9 views
0

Ich habe eine Gruppe von Optionsfeldern, die ich versuche, mit einem benutzerdefinierten Validierer in ASP zu überprüfen. Ich weiß, dass ich einen Erforderlichen Validator für diese Elemente nicht verwenden kann, da sie nicht für Erforderliche Validierer in ASP.Net auswählbar sind und ich eine Optionsfeldliste nicht verwenden kann, da ich ein Div habe, das zwischen den Optionsfeldern angezeigt wird, wenn sie sindÜberprüfen von Radiobuttons in ASP.Net w/jQuery

<asp:RadioButton ID="showYear" runat="server" CssClass="reportYear" GroupName="dateSelection"/>Show by calendar year 
//// Div to show if showYear is Clicked 
<asp:RadioButton ID="showDate" runat="server" CssClass="reportDates" GroupName="dateSelection"/>Show by date range 
//// Div to show if showDate is Clicked 

geklickt Und hier ist die benutzerdefinierte Validator:

<asp:CustomValidator ID="validateGroup1" runat="server" Display="Dynamic" ErrorMessage="Please select option for step 1" ClientValidationFunction="validateDateStyle" ValidationGroup="validateYTDSearch" /> 

Das Problem, das ich habe, ist diese JavaScript-Funktion:

function validateDateStyle(oSrc, args) { 

    $(document).ready(function() { 

     var r1 = $('.reportDates').attr('checked'); 
     var r2 = $('.reportYear').attr('checked'); 

     alert(r1 + " " + r2); 


    }); 

} 

Nach Auslösen der Funktion mit th Der Validator ruft das Fenster mit

"Undefined Undefned" auf, auch wenn die Funkgeräte überprüft werden.

Irgendwelche Ideen, warum es den geprüften Wert nicht richtig zieht? jQuery mit .is() Funktion und Verwendung der :checked pseudoselector

Dank

Antwort

2

Sie können für den Überprüfungsstatus eines Radiobuttons überprüfen:

if($('.reportDates').is(':checked')) { 
    // do stuff 
} 
+0

Endlich funktioniert es, aber ja, diese Lösung funktioniert. –

0

Der Grund, warum Sie bekommen eine undefinierte bei dem Versuch, die „überprüft Referenz "Attribut ist, weil dieses Attribut für ein Optionsfeldelement nicht vorhanden ist, wenn es nicht aktiviert/ausgewählt ist. Jedes Mal, wenn es ausgewählt/nicht ausgewählt wird, fügt der Browser dieses Attribut hinzu bzw. entfernt es.

Wahrscheinlich möchten Sie validieren, dass ein Optionsfeld ausgewählt ist. Sie könnte überprüfen Sie jeden einzelnen Radio-Button den Status überprüft, wenn Sie wollten, aber dann müssen Sie den Code an zwei Stellen ändern, wenn Sie Radio-Buttons zu einem späteren Zeitpunkt hinzufügen oder entfernen.

Stattdessen können Sie eine einfachere Lösung verwenden, die der von Krof in seiner Lösung ähnelt. Die Ausnahme ist, dass Sie die Optionsfeldgruppe überprüfen. Da die Gruppe kein tatsächliches HTML-Element ist, müssen Sie Elemente anhand des Gruppennamens auswählen. Wenn Ihre Seite als HTML-Seite gerendert wird, wird der Gruppenname ähnlich dem Attribut "Name" ausgewählt.

$('[name$="dateSelection"]') 

Das „$ =“ Operator einfach übersetzt „endet mit“ da ASP.Net kann möglicherweise den Namen mit einem Inhaltsfeld ID oder etwas dergleichen voranstellen. Es ist ein bisschen ein Betrüger, aber es ist eine einfache Möglichkeit, um auszuwählen, was Sie wollen.

Sie erhalten ein Array der Radiobuttons mit einem Attribut "name" mit einem Wert, der mit "dateSelection" endet. Jetzt

, um zu bestimmen, ob ein Optionsfeld in der Gruppe überhaupt, würden Sie dies:

$('[name$="dateSelection"]').is(':checked'); 

Der resultierende Wert sagt Ihnen, ob ein Optionsfeld in der Gruppe ausgewählt ist oder nicht, und ist ein viel elegantere Lösung als das Überprüfen jedes einzelnen Radio Button-Status. Nicht zu vergessen, weniger Fehler anfällig, wenn Sie später Schaltflächen hinzufügen/entfernen.

Verwandte Themen