2010-09-23 15 views
0

C'est actuellement la configuration que j'ai:bouton radio et ayant une validation de zone de texte Ruby on Rails

<input id="demographics_questionary_gender_male" name="demographics_questionary[gender]" type="radio" value="Male"> Male 
<input id="demographics_questionary_gender_gender" name="demographics_questionary[gender]" type="radio" value="Female"> Female 
<input id="demographics_questionary_gender_male" name="demographics_questionary[gender]" type="radio" value="Other"> Other 
<input id="other_gender_value" name="other_gender[value]" size="30" type="text"> 

Cela produira trois boutons radio (Homme, Femme, Autre). Il y a aussi une zone de texte si le bouton radio "Autre" est sélectionné.

Ma question porte sur la façon de valider si la zone de texte est remplie si le bouton radio «Autre» est sélectionné.

Actuellement, ce que je fais est dans le contrôleur je vérifie si l'autre bouton radio est sélectionné et si c'est alors je vais changer la valeur stockée à la valeur définie dans la boîte de texte "autre". Cependant, je ne sais pas vraiment comment valider la zone de texte. Je sais comment valider si un bouton radio est vérifié en vérifiant qu'une valeur a été définie dans le modèle, mais pas comment s'assurer que l'utilisateur a entré des données dans la zone de texte "Autre".

Voici l'extrait de code du contrôleur:

if @demographics_questionary.gender == 'Other' 
    @other_gender = params[:other_gender] 
    if @other_gender[:value].nil? 
     @demographics_questionary.gender = @other_gender[:value] 
    else 
     @demographics_questionary.gender = 'Not Set' 
    end 
end 

Comme vous pouvez le voir, je actuellement situé juste à « non défini » si le « Autre » bouton radio est sélectionné et l'Autre la zone de texte est vide. Cependant, ce code est exécuté lorsqu'un bouton est sélectionné pour traiter les données. Idéalement, je voudrais que la validation soit faite à la page de vue où elle empêcherait l'utilisateur d'avancer jusqu'à ce que la boîte de texte soit remplie si le bouton radio «Autre» est sélectionné. De cette façon, au moment où il frappe même la méthode du contrôleur, cette vérification ne serait pas nécessaire.

Mais encore une fois je suis ouvert à toutes les autres méthodes suggérées.

Je pense que cela peut être fait JavaScript ou jQuery mais je ne sais pas comment.

Oh ouais, donc tout ce code dans la vue se trouve dans un champ de formulaire:

<% form_for(@demographics_questionary) do |f| %> 
    <%= f.error_messages :header_message => "Please do not skip any of the questions." %> 
    /* Code for radio buttons */ 
    <%= f.submit 'Next' %> 

<%end%> 

Notez que le code du bouton radio est situé dans un form_for. Une fois que le bouton de soumission est déclenché, il va exécuter la méthode dans le contrôleur. Si vous utilisiez JavaScript/jQuery, comment ajouteriez-vous la fonction au bouton de soumission?

Ceci est la page en cours:

http://otoplusvn.com/TherapistSurvey/demographics_questionaries/new pour la question 2 sur le sexe.

Des suggestions? Je l'apprécie, Merci Derek

Répondre

2

Vous pouvez ajouter des règles de dépendance, quelque chose comme ceci:

$('#register_form').validate({rules: { 
    'other_gender[value]': { 
     required: { 
     depends: function(element) { 
      return $("input[name=demographics_questionary[gender]]:checked").val() == "Other" 
     } 
     } 
    } 
} }); 

Cela nécessitera la zone de texte, uniquement si l'option choisie est « Autre »