Jquery 一旦更改显示/更改部分

Jquery 一旦更改显示/更改部分,jquery,ruby-on-rails,selectionchanged,Jquery,Ruby On Rails,Selectionchanged,有一个使用select的下拉列表 <%= select("array", "folder", @rows.keys, {}, :onchange =>"?" )%> “?”“”%> 有一个部分叫做“形式” 每当选择发生更改时,我都需要渲染部分。如果有办法的话,请告诉我。我发现rails 3.0不推荐使用remote\u函数。我在这里看到了onchange和select标签的所有可能链接,但找不到正确的答案。我不熟悉rails、jQuery和Ajax。请帮忙 谢谢为什么不

有一个使用select的下拉列表

<%= select("array", "folder", @rows.keys, {}, :onchange =>"?" )%>
“?”“”%>
有一个部分叫做“形式”


每当选择发生更改时,我都需要渲染部分。如果有办法的话,请告诉我。我发现rails 3.0不推荐使用
remote\u函数。我在这里看到了onchange和select标签的所有可能链接,但找不到正确的答案。我不熟悉rails、jQuery和Ajax。请帮忙


谢谢

为什么不在同一页中呈现表单,并在选择标签的更改上隐藏和显示它

<html> 
  <body>

  <!-- Your Select tag -->
  <select id="select_id"> 
    <option value="one" selected> One </option>
    <option value="two"> Two </option>
  </select>

  <!-- Here your a div inside with your form is placed -->
  <div id="myform" style="display:none">
    <form action="/someurl">
      .. ..
    </form> 

   <!-- JQuery code to  show the form -->
  <script type="text/javascript">
    $(document).ready(function() {
       $("select#select_id").bind("change",function() {
         if ($(this).val() == "one") 
          $("div#myform").show(); 
         else
          $("div#myform").hide(); 
       })
   })

  </script>

</html>

在服务器端,您需要使用
format.js
响应ajax请求,并使用render命令呈现一个模板,或者只定义一个
.js.erb
文件

确实有一种方法可以做到这一点,这需要做一些工作,但一旦掌握了窍门,就很容易了

首先,您需要将jQuery函数附加到选择框的
change
事件。这可以通过向
application.js
文件添加一些javascript来实现。我们想在这里这样做,所以我们的脚本仍然存在。您可以在
application.js
文件中尝试以下操作:

$(document).ready(function(){
  $("#select_field_id").change(function(){
    var id = $(this).children(":selected").val();
    var params = 'some_id=' + id;
    $.ajax({
      url: "/some_controller/change_folder",
      data: params
    })
});
这样做的目的是将匿名函数附加到id为的select字段的
change
事件
select\u field\u id
。当该字段更改时,所选选项的
id
将存储在var
id
中,然后我们通过执行
var params='some_id='+id为将发送的请求创建一个参数
some\u id
将是您正在更改的任何内容的id(因此,如果您在示例中使用的是
文件夹\u id

现在我们需要在控制器中创建处理该请求的方法。继续文件夹示例,将其添加到文件夹控制器:

def change_folder
  @folder = Folder.find(params[:some_id])
  respond_to do |format|
    format.js
  end
end
这只是根据ajax请求发送到
change\u folder
的id查找文件夹。它还将寻找相应的
change\u folder.js.erb
change\u folder.js
文件进行渲染

现在我们需要编写一个
change\u folder.js.erb
文件。我们需要用我们得到的新文件夹替换页面某些部分的HTML,因此您应该有某种
div
或具有唯一id的其他部分

change_folder.js.erb
中,我们可以这样写:

$('#your_div').html("<%= escape_javascript(render(partial: "folder", 
locals: { :folder => @folder })).html_safe %>")
\u文件夹.html.erb
partial中
.name
.last\u updated
当然只是文件夹模型的属性。您将不得不使用您为文件夹模型指定的任何属性


这会让你去你想去的地方。如果您需要任何澄清,请告诉我。

非常感谢,因为我对Rails、Jquery和Ajax都是新手,所以我需要一些时间来创建一个.js.erb文件并从中渲染部分内容。目前@viren解决了我的问题。非常感谢您对@Zajn的介绍,我遇到了几件事:1)您需要在routes.rb文件中添加一个与
change\u文件夹
相对应的文件,在本例中类似于
get:change\u文件夹
,根据ajax调用的位置,您可能需要稍微处理一下它。2)明白了:
change\u folder.js.erb
中的任何js错误都会无声地失败,因此它可能看起来无缘无故不起作用,请确保通过执行类似
console.log(…)的简单操作来测试js文件
我是否还必须在控制器中允许额外参数(使用Rails 5.1.3)?由于某种原因,它对我不起作用。我已经按照您的回答和ohhh的评论中的步骤进行了操作。谢谢谢谢,问题似乎已经解决了,如果我需要更多的细节,我会回来的
def change_folder
  @folder = Folder.find(params[:some_id])
  respond_to do |format|
    format.js
  end
end
$('#your_div').html("<%= escape_javascript(render(partial: "folder", 
locals: { :folder => @folder })).html_safe %>")
<%= @folder.name %>
<%= @folder.last_updated %>