【问题标题】:Render partial after change select更改选择后渲染部分
【发布时间】:2016-01-28 09:42:35
【问题描述】:

我有以下看法

<%= form_for @survey do |f| %>
  <div class="field">
    <%= f.label :title %><br>
    <%= f.text_field :title %> <br><br>
    <%= f.label :description %><br>
    <%= f.text_field :description %><br><br>
  </div>

  <%= f.fields_for :survey_sections do |builder| %>
    <%= builder.text_field :title, :placeholder => "Abschnittsbeschreibung" %><br>
    <%= builder.fields_for :questions do |quest| %>
      <%= quest.text_field :text, :placeholder => "Frage" %> <br>
      <%= quest.fields_for :answers do |ans| %>
        <%= ans.text_field :text, :placeholder => "Antwort" %> <br>
      <%end%>
    <%end%>
    <%= select_tag("question_type",options_for_select([["Radio", "radio"],["Checkbox", "check"]])) %>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

选择其中一个选项后,我想在此视图中呈现部分内容。 我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby partial-views onchange partial


    【解决方案1】:

    最简单的方法是使用display:none渲染部分

    <div id='foo' style='display:none'>
      <%= render :foobar %>
    </div>
    

    当用户选择某些东西时,通过 JS(jQuery) 显示它。

    $('[name=question_type]').change(function() {
      $('#foo').show();
    });
    

    【讨论】:

    • 我不会在表单中这样做,因为在提交表单时,隐藏 div 中的输入仍然会作为参数传递。在 change 事件处理程序中加载/删除/替换 div 的内容要好得多(而不是显示/隐藏)。
    • 隐藏的input标签值将被传递,但只是div
    【解决方案2】:

    如果你使用的是 jQuery,那么试试这个:

    查看

    <%= select_tag("qustion_type",options_for_select([["Radio", "radio", {:onclick => "someFunction(#{controller_path})"}],["Checkbox", "check", {:onclick => "someFunction(#{controller_path})"}]])) %>
    

    JAVASCRIPT

    function someFunction(url) {
      jQuery.ajax({
        url: url,
        data: {some_data: "data_value"},
        success: function(data) {
          //data has the html code that you render in controller
        }
      });
    }
    

    编辑(见评论)

    正如您所要求的,您需要在每个选项选择上呈现部分内容。因此,对于每个选项选择,您需要点击控制器方法。在我的示例中,url 是控制器端点(例如:- render_radio_some_controller_path)。

    def render_radio
      render :partial => "radio"
    end
    

    之后会进入Ajax调用成功块,data会有radio.html.erb中定义的html。现在,您只需要使用jQuery 用data 更新所需的div html(例如:-jQuery("#some_div").html(data);)

    【讨论】:

    • 你能解释一下我必须在控制器中写什么才能渲染 _radio.html.erb 文件吗?或者我必须传递哪些数据变量数据?
    • 我不知道我做错了什么。我有函数 someFunction(url){ jQuery.ajax({url: url, data: {some_data: "data_value"}, success: function(数据) { jQuery("#some_div").html(data); } });它不起作用,我不知道为什么:(
    • 那么 rob,在我看到错误日志之前,真的很难告诉你哪里出了问题。
    • 你能告诉我一个教程或类似的东西来解释我的问题的解决方案吗?
    • 似乎THIS 帖子与我试图解释的内容完全相同。只是不要选择隐藏/显示选项,因为它存在性能问题。使用 ajax 调用解决方案。
    猜你喜欢
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多