ruby-on-rails 基于Rails表单中的下拉选择显示不同的div

mrzz3bfm  于 2023-01-14  发布在  Ruby
关注(0)|答案(1)|浏览(135)

我尝试在Rails中创建一个表单,其中包含一个带有三个选项的下拉菜单:"foo"、"bar"和"baz"。如果用户选择了其中一个选项,我希望根据所选选项显示不同的div。
下面是我的代码:

<% options = [['Foo', 'foo'], ['Bar', 'bar'], ['Baz', 'baz']] %>

<%= form.label :type %>
<%= form.select :type, options_for_select(options, @selected_type), name: 'type' %>

<% if @selected_type == 'foo' %>
  <div>
    <%= form.hidden_field :type, value:'foo' %>
  </div>
<% elsif @selected_type == 'bar' %>
  <div>
    <%= form.hidden_field :type, value:'bar' %>
  </div>
<% elsif @selected_type == 'baz' %>
  <div>
    <%= form.hidden_field :type, value:'baz' %>
  </div>
<% end %>

这是在我的控制器:

@vendor_item = VendorItem.new
@selected_type = params[:type]
puts "Selected type: #{@selected_type}"

我已经使用select元素实现了这个功能,但是表单没有按预期工作,当我从下拉菜单中选择一个选项时,表单没有被提交,div也没有显示。

bvk5enib

bvk5enib1#

用例1:如果表单应在服务器端提交,则下拉列表更改后:

<% options = [['Foo', 'foo'], ['Bar', 'bar'], ['Baz', 'baz']] %>

<%= form_with url: "your URL goes here", class: 'test_submit_form' do |form| %>
  <%= form.label :type %>
  <%= form.select :type, options_for_select(options, @selected_type), name: 'type' %>

  <% if @selected_type == 'foo' %>
    <div>
      <%= form.hidden_field :type, value:'foo' %>
    </div>
  <% elsif @selected_type == 'bar' %>
    <div>
      <%= form.hidden_field :type, value:'bar' %>
    </div>
  <% elsif @selected_type == 'baz' %>
    <div>
      <%= form.hidden_field :type, value:'baz' %>
    </div>
  <% end %>

  <%= form.submit %>
<% end %>

Javascript:

<script>
  $('#type').on('change', function(){
    $('form.test_submit_form').submit();
  });
</script>

用例2:如果您只需要在客户端显示/隐藏DIV,则在下拉菜单更改后:

<% options = [['Foo', 'foo'], ['Bar', 'bar'], ['Baz', 'baz']] %>

<%= form_with url: "your URL goes here", class: 'test_submit_form' do |form| %>
  <%= form.label :type %>
  <%= form.select :type, options_for_select(options, @selected_type), name: 'type' %>
  
  <div class="option-container foo" style="display: <%= @selected_type == 'foo' ? 'block' : 'none'%>">
    <%= form.hidden_field :type, value:'foo' %>
  </div>

  <div class="option-container bar" style="display: <%= @selected_type == 'bar' ? 'block' : 'none'%>">
    <%= form.hidden_field :type, value:'bar' %>
  </div>

  <div class="option-container baz" style="display: <%= @selected_type == 'baz' ? 'block' : 'none'%>">
    <%= form.hidden_field :type, value:'baz' %>
  </div>

  <%= form.submit %>
<% end %>

Javascript:

<script>
  $('#type').on('change', function(){
    $('.option-container').hide();
    $('.option-container.' + $(this).val()).show();
  });
</script>

请注意,div上的option-container和选项(foobarbaz)类以及控制器代码在两种情况下将保持不变:

@selected_type = params[:type]

相关问题