0

我想根据之前的 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应该是什么样子的呢?谢谢你。多里扬

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" 现在它正在工作:)

4

1 回答 1

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。例如:

<%= select_tag ... %>
于 2012-05-04T12:50:12.847 回答