onchange显示/更改部分
使用select有一个下拉列表
"?" )%>
有部分称为“forms”
每当选择发生变化时,我都需要渲染部分。 如果有办法,请告诉我。 我发现remote_function
function已从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.erb
或change_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模型提供的任何属性。
这应该让你去你需要的地方。 如果您需要澄清任何内容,请告诉我。