2010-12-09 17 views
0

J'ai un groupe de boutons radio que j'essaie de valider avec un validateur personnalisé dans ASP. Je sais que je ne peux pas utiliser un validateur requis pour ces éléments, car ils ne sont pas éligibles pour les validateurs requis dans ASP.Net et je ne peux pas utiliser une liste de boutons radio car j'ai un div affiché entre les boutons radio si on clique dessusValidation des radiobuttons dans 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 

Et voici la coutume Validator:

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

le problème que j'ai est cette fonction javascript:

function validateDateStyle(oSrc, args) { 

    $(document).ready(function() { 

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

     alert(r1 + " " + r2); 


    }); 

} 

au déclenchement de la fonction avec e L'appel du validateur ouvre la fenêtre avec

"Undefined Undefned" même lorsque les radios sont cochées.

Des idées pour lesquelles il ne tirera pas correctement la valeur vérifiée?

Merci

Répondre

2

Vous pouvez vérifier l'état coché d'un bouton radio en utilisant la fonction .is() jQuery et en utilisant le :checked pseudoselector:

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

Finalement, ça a marché mais oui, cette solution fonctionne. –

0

La raison pour laquelle vous obtenez un non défini en essayant de faire référence à la « cochée "attribut est parce que cet attribut n'existe pas pour un élément de bouton radio lorsqu'il n'est pas coché/sélectionné. Chaque fois qu'il est sélectionné/non sélectionné, le navigateur ajoute/supprime cet attribut, respectivement.

Ce que vous voulez valider, c'est probablement qu'un bouton radio est sélectionné. Vous pouvez vérifier l'état vérifié de chaque bouton radio si vous le souhaitez, mais vous devez ensuite changer le code à deux endroits si jamais vous ajoutez ou supprimez des boutons radio à un moment ultérieur. Au lieu de cela, vous pouvez utiliser une solution plus simple, similaire à celle fournie par Krof dans sa solution. L'exception est que vous vérifiez le groupe de boutons radio. Puisque le groupe n'est pas un élément html réel, vous devez sélectionner des éléments par le nom du groupe. Lorsque votre page s'affiche en tant que page HTML, le nom du groupe est sélectionné par l'attribut "name" comme cela.

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

Le « $ = » opérateur traduit simplement « se termine par » car ASP.Net peut éventuellement préfixe le nom d'un panneau de contenu ID ou quelque chose du genre. C'est un peu une triche, mais c'est un moyen simple de sélectionner ce que vous voulez. Ce que vous obtenez en retour est un tableau des boutons radio qui ont un attribut "nom" avec une valeur qui se termine par "dateSelection".

Maintenant, pour déterminer si un bouton radio est sélectionné dans le groupe du tout, vous feriez ceci:

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

La valeur résultante vous indique si un bouton radio dans le groupe est sélectionné ou non et est solution beaucoup plus élégante que la vérification de chaque état du bouton radio individuel. Sans oublier, moins de bugs lorsque vous ajoutez/supprimez des boutons plus tard.