在 Ruby on Rails 中使用带有 If 语句的 Select Option 表单
Using Select Option forms with If statements in Ruby on Rails
我的目标:创建一个表单,使用Ruby/Rails表单帮助程序为每个选择提供不同的值,并if/elsif
语句来show|hide
选项。(在块引号中设置工作JS代码)
我的问题:不确定如何使用带有if/elsif
语句的 ruby/rails 中的选项选择值。 此信息将从用户输入到Post
中。 (使用设计用户 GEM)
我如何设法让事情变得正常:创建了一个带有 JS 函数的引导表单以显示 |隐藏选项选择字段,具体取决于它们的选择方式。(下面我的_form.html.erb
)
在我的Ruby Rails版本底部的表单中,我是否缺少任何最初隐藏可选Hallway表单的内容?它是否以轨道格式正确构造?
请原谅我缺少 ruby rails 语法,因为我正在学习但找不到有关如何执行此类任务的资源,以show|hide
选择带有if/elsif
语句的表单。
感谢您未来的时间。
关于表单如何运作的说明:
第 1 步:选择年级
第 2 步:选择走廊
-如果走廊A, 显示走廊 A 的选项选择
-如果走廊B, 显示走廊 B 的选项选择
-如果走廊C, 显示走廊 C 的选项选择
我的
_form.html.erb
:<div class="filter-third"> <div class="styled-select styled-blue"> <select id="post_gradelvl" name="post[gradelvl]"> <option value="%">Select Grade Level</option> <option value="PS4">4</option> <option value="PS5">5</option> </select> </div> </div> <div class="filter-third"> <div class="styled-select styled-blue"> <select id="post_hallway" name="post[hallway]"> <option value="%">Select Hallway</option> <option value="hallA">A</option> <option value="hallB">B</option> <option value="hallC">C</option> </select> </div> </div> <div class="filter-third"id="hallwayAFields" style="display: none;"> <div class="styled-select styled-blue"> <select id="post_hallAClasses" name="post[hallAClasses]"> <option value="%">Select Available Classes</option> <option value="hallAclass1">English</option> <option value="hallAclass2">Spanish</option> <option value="hallAclass3">German</option> </select> </div> </div> <div class="filter-third"id="hallwayBFields" style="display: none;"> <div class="styled-select styled-blue"> <select id="post_hallBClasses" name="post[hallBClasses]"> <option value="%">Select Available Classes</option> <option value="hallBclass1">Math</option> <option value="hallBclass2">Science</option> <option value="hallBclass3">Gym</option> </select> </div> </div> <div class="filter-third"id="hallwayCFields" style="display: none;"> <div class="styled-select styled-blue"> <select id="post_hallCClasses" name="post[hallCClasses]"> <option value="%">Select Available Classes</option> <option value="hallCclass1">Art</option> <option value="hallCclass2">Extra Cred 1</option> <option value="hallCclass3">Extra Cred 2</option> </select> </div> </div>
我的JS为每个走廊选择一个
show|hide
选项:<script> $("#post_hallway").change( function(){ if ($("#post_hallway").val() == "hallA") { $("#hallwayAFields").show(); } else { $("#hallwayAFields").hide(); } if ($("#post_hallway").val() == "hallB") { $("#hallwayBFields").show(); } else { $("#hallwayBFields").hide(); } if ($("#post_hallway").val() == "hallC") { $("#hallwayCFields").show(); } else { $("#hallwayCFields").hide(); } } ); </script>
我对Ruby Rails表单版本的尝试是我的目标:
<div class="option-select">
<%= f.option-select :gradelvl %>
<select id="post_gradelvl" name="post[gradelvl]">
<option value="%">Select Grade Level</option>
<option value="PS4">4</option>
<option value="PS5">5</option>
</select>
</div>
<div class="option-select">
<%= f.option-select :hallway %>
<select id="post_hallway" name="post[hallway]">
<option value="%">Select Hallway</option>
<option value="hallA">A</option>
<option value="hallB">B</option>
<option value="hallC">C</option>
</select>
</div>
<% if :hallAClasses %>
<div class="filter-third" id="hallwayAFields">
<%= f.option-select : hallAClasses %>
<select id="post_hallAClasses" name="post[hallAClasses]">
<option value="%">Select Available Classes</option>
<option value="hallAclass1">English</option>
<option value="hallAclass2">Spanish</option>
<option value="hallAclass3">German</option>
</select>
</div>
<% elsif :hallBClasses %>
<div class="filter-third"id="hallwayBFields">
<%= f.option-select : hallBClasses %>
<select id="post_hallBClasses" name="post[hallBClasses]">
<option value="%">Select Available Classes</option>
<option value="hallBclass1">Math</option>
<option value="hallBclass2">Science</option>
<option value="hallBclass3">Gym</option>
</select>
</div>
<% else :hallCClasses %>
<div class="filter-third"id="hallwayCFields">
<%= f.option-select : hallCClasses %>
<select id="post_hallCClasses" name="post[hallCClasses]">
<option value="%">Select Available Classes</option>
<option value="hallCclass1">Art</option>
<option value="hallCclass2">Extra Cred 1</option>
<option value="hallCclass3">Extra Cred 2</option>
</select>
</div>
<% end %>
除了 rails 视图中的语法问题之外,这里还有一个更基本的问题:视图模板生成一个"静态"HTML 页面,该页面仅包含加载页面时选择的走廊的选择选项。您的 JavaScript 将无法正常工作,因为没有其他内容可显示。
如果不在 JavaScript 中管理显示/隐藏,就无法做你想做的事。因此,您的轨道视图模板必须呈现所有走廊的select
。
最重要的是,如果用户正在编辑现有对象,则必须在页面加载后立即运行JavaScript,以隐藏需要立即隐藏的内容。更好的是,加载页面时,所有内容都应该隐藏,因此脚本将仅显示需要的内容。基本上是这样的:
updateVisibleClasses = function(){
if ($("#post_hallway").val() == "hallA") {
$("#hallwayAFields").show();
} else {
$("#hallwayAFields").hide();
}
if ($("#post_hallway").val() == "hallB") {
$("#hallwayBFields").show();
} else {
$("#hallwayBFields").hide();
}
if ($("#post_hallway").val() == "hallC") {
$("#hallwayCFields").show();
} else {
$("#hallwayCFields").hide();
}
}
$(document).ready(updateVisibleClasses);
$("#post_hallway").change(updateVisibleClasses);
Rails 可以帮助您生成 select 语句,这些语句应该来自服务器,而不是在视图中进行硬编码。如果你有一个带有走廊属性的类模型,你可以像这样生成选择选项(这只是一个起点):
<%= form_for @name_of_your_model do |f| %>
<!-- Take care of the grade level here -->
<% @hallways.each do |hallway| %>
<%= f.select 'hallway', 'class_id', Class.where(hallway_id: hallway.id).collect {|c| [ c.name, c.id ] }, { include_blank: true }) %>
<% end %>
<% end %>
请查看选择表单帮助程序的文档。
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 如何在 API 调用后和 if 语句中启用提交按钮
- 带有多个elseif的Javascript if语句
- Sharepoint JScript if语句未执行
- Javascript:If-then语句在函数中不起作用
- for循环中的javascript if语句找不到==
- jquery if语句返回return wong语句
- 在if语句下的html中使用javascript变量
- 将错误与if语句混淆
- 如何检查if/else语句中的随机条件
- 循环通过数组的If语句不起作用
- jQuery模板中的If语句
- 如何从数据库中回显If语句
- 如何减少if语句的数量
- Node.js-承诺和锥形语句(if、switch等)-如何构建
- 如何在嵌套ng重复指令中使用控制语句(if语句)
- 如何创建语句if包含"&"
- If语句- If主体有一个类remove在滚动原生javascript
- Javascript中的if语句- if - else问题