单选按钮并具有文本框验证Ruby on Rails

时间:2010-09-23 06:47:33

标签: javascript ruby-on-rails jquery-validate radio-button

这是我目前的设置:

<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

如您所见,如果选中“其他”单选按钮且“其他”文本框为空,我目前只将其设置为“未设置”。但是,当选择按钮来处理数据时,将执行此代码。理想情况下,我希望在视图页面上进行验证,如果选择“其他”单选按钮,则会阻止用户前进,直到填写文本框。通过这种方式,当它甚至达到控制器方法时,不需要进行此检查。

但我再次建议采用任何其他方法。

我认为这可以通过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%>

请注意,单选按钮代码位于form_for中。触发提交按钮后,它将在控制器中执行该方法。如果您要使用JavaScript / jQuery,您如何将该函数附加到提交按钮?

这是当前页面:

关于性别的问题2,

http://otoplusvn.com/TherapistSurvey/demographics_questionaries/new

有什么建议吗?我很感激,谢谢 德里克

1 个答案:

答案 0 :(得分:2)

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

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

仅当所选选项为“其他”时才需要文本框