我想根据之前的collection_select选项填充collection_select的选项。我有一个选择体育,我想根据这项运动填充下一个选择。
问题是我找到的所有例子都是旧版本的ROR,所以我决定在这里问一下。我知道我必须添加一些讨厌的东西,如:
html_options = {:onchange=>'d=$("#player_sports_id").val();$.ajax({type: "GET", url: "/players/returnsel1.js?sports_id="+d, dataType: "script" });'})
调用player#returnsel1并返回returnsel1.js.erb。 在returnsel1中我有变量
@teamstoreturn=Teams.where(:sport_id=params[:sport_id])
那么jquery returnsel1.js.erb应该怎么样? 谢谢。 Dorijan
EDIT1: 这是它的实际外观,但它不起作用:
html_options = {:onchange=>'d=$("#player_sports_id").val();$.ajax({type: "GET", url: "/players/returnsel1?sports_id="+d, dataType: "script",success: function(data){ $("#player_teams_id").html(data)} });'})
在控制器中它是这样的:
def returnsel1
@teamstoreturn=Team.where(:sports_id=>params[:sports_id])
render :inline => "<%= collection_select(:player, :teams_id, @teamstoreturn, :id, :naziv) %>"
end
如果我去/ players / returnsel1?sports_id = 2我得到了正确的下拉菜单
我做错了什么?
EDIT2: 应该有dataType:“html”而不是dataType:“script” 现在它正在工作:)
答案 0 :(得分:1)
您应该使用函数扩展.ajax请求,该函数可以处理成功的答案。如果没有这个,答案就是诋毁。该函数应该包含一个jquery代码,以更改其他选择内容。
html_options = {:onchange=>'d=$("#player_sports_id").val();$.ajax({type: "GET", url: "/players/returnsel1.js?sports_id="+d, dataType: "script", success: function(data){ $("#other_box_part").html(data)} });'})
这样您就可以更改此元素,因此必须将其渲染为必须插入的html片段。因此,答案中不需要javascript代码,只需要html。 E.g:
<%= select_tag ... %>