这是我目前的设置:
<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。
有什么建议吗?我很感激,谢谢 德里克
答案 0 :(得分:2)
您可以添加依赖关系规则,如下所示:
$('#register_form').validate({rules: {
'other_gender[value]': {
required: {
depends: function(element) {
return $("input[name=demographics_questionary[gender]]:checked").val() == "Other"
}
}
}
} });
仅当所选选项为“其他”时才需要文本框