代码之家  ›  专栏  ›  技术社区  ›  darewreck

单选按钮,并有一个文本框验证Ruby on Rails

  •  0
  • darewreck  · 技术社区  · 14 年前

    <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">
    

    这将产生三个单选按钮(男,女,其他)。如果选择了“其他”单选按钮,也会有一个文本框。

    目前,我所做的是在控制器中检查是否选择了其他单选按钮,如果选择了,那么我将把存储的值更改为“其他”文本框中设置的值。但是,我真的不知道如何验证文本框。我知道如何通过验证是否在模型中设置了值来验证是否选中了单选按钮,但不知道如何确保用户已将数据输入到“其他”文本框中。

    以下是来自控制器的代码片段:

    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
    

    如您所见,如果选择了“其他”单选按钮,并且“其他”文本框为空,则我当前将其设置为“未设置”。但是,当选择一个按钮来处理数据时,就会执行此代码。理想情况下,我希望验证在视图页面上完成,如果选择了“Other”单选按钮,则在文本框被填充之前,它将阻止用户前进。这样,当它甚至命中控制器方法时,就不需要进行此检查了。

    但我还是愿意接受任何其他建议的方法。

    我认为这可以通过JavaScript或jQuery实现,但我不确定如何实现。

    <% 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%>
    

    请注意,单选按钮代码位于的表单中。一旦submit按钮被触发,它就会在控制器中执行这个方法。如果要使用JavaScript/jQuery,您将如何将函数附加到submit按钮?

    这是当前页面:

    http://otoplusvn.com/TherapistSurvey/demographics_questionaries/new 关于性别的问题2。

    德里克

    1 回复  |  直到 9 年前
        1
  •  3
  •   Emily    14 年前

    您可以添加依赖关系规则,如下所示:

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

    需要文本框, 所选选项为“其他”