onchange显示/更改部分

使用select有一个下拉列表

"?" )%> 

有部分称为“forms”

  

每当选择发生变化时,我都需要渲染部分。 如果有办法,请告诉我。 我发现remote_functionfunction已从rails 3.0弃用。 我在这里看到了所有可能的链接onchange和select标签,但找不到合适的答案。 我是rails,jQuery和Ajax的新手。 请帮忙

谢谢

为什么不在同一页面中呈现表单并隐藏并在选择标记的 更改时显示它

       

我还是想做一个ajax请求我也很简单

 $(document).ready(function() { $("select#select_id").bind("change",function() { if ($(this).val() == "one") { $.ajax({ url : "/form_url", data : "html", type: "GET", success : function(data) { $("div#myform").html(data) } }) }) }) 

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

肯定有一种方法可以做到这一点,这有点工作,但是一旦掌握了它就很容易了。

首先,您需要将jQuery函数附加到选择框的change事件。 这可以通过在application.js文件中添加一些javascript来完成。 我们想在这里这样做,所以我们的javscript仍然不显眼 。 你可以在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_field_id的select字段的change事件。 当该字段被更改时,所选选项的id将存储在var id ,然后我们通过执行var params = 'some_id=' + id;为我们发送的请求创建一个参数var params = 'some_id=' + id;some_id将是你正在改变的内容的id(所以如果你在你的例子中使用了这就是一个folder_id )。

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

 def change_folder @folder = Folder.find(params[:some_id]) respond_to do |format| format.js end end 

这只是根据您的ajax请求发送到change_folder的id找到一个文件夹。 它还将寻找相应的change_folder.js.erbchange_folder.js文件进行渲染。

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

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

 $('#your_div').html("<%= escape_javascript(render(partial: "folder", locals: { :folder => @folder })).html_safe %>") 

这将呈现一个名为_folder.html.erb的部分_folder.html.erb ,该名称与change_folder.js.erb文件位于同一目录中。 部分将需要使用@folder变量来显示字段,因此您需要以下内容:

 <%= @folder.name %> <%= @folder.last_updated %> 

_folder.html.erb部分内。 .name.last_updated当然只是组成了Folder模型的属性。 您必须使用您为Folder模型提供的任何属性。

这应该让你去你需要的地方。 如果您需要澄清任何内容,请告诉我。