Rails 2.3.x Ajax 调用使用 Prototype.js 和 "select" helper



简单地说,我有两个下拉列表。第一个是账户。

我想做的是:从第一个下拉列表中选择一个帐户,获取所选帐户的id,用这个"id"从数据库中获取信息,然后在第二个下拉菜单中填充"Ajax调用"。

听起来很简单,但我无法建立关系。

轨道:2.3.5Js:Prototype.Jsruby:1.8.7

我正在尝试使用的下拉列表(我真的不确定:onchange发生了什么)

<%= select :account, :id
@accounts.map{ |a| [ a.company a.id ] },
{ :include_blank => "--Select Account--"},
:onchange => my_function() #I guess
%>

我的控制器名称:用户,操作:search_User

问题:如何将所选帐户的id发送到我的控制器,然后填写第二个下拉列表,我应该如何修改":onchange=>my_function"我必须为我写任何JS或助手函数吗?

我搜索了很多,但我找到了部分答案(因为我想我的rails版本已经很旧了)。所以任何答案都会有很大帮助。

解决方案:

多亏了Santosh和Umut Sirin,我明白了。以下是操作方法:

1) 下拉以使ajax调用

<%= select :account, :id
@accounts.map{ |a| [ a.company a.id ] },
{ :include_blank => "--Select Account--"},
:onchange => "my_function()" %>

2) 要填充的下拉列表:

<select id="subaccounts" name="subaccount[id]"></select>

3) Prototype.js代码进行Ajax调用并填充第二个下拉列表:

<script type="text/javascript">
function my_function(){
var selectBox = $('account_id');
if(selectBox.selectedIndex === 0) {
return;
}
var selectedValue = selectBox.options[selectBox.selectedIndex].value;
selectedValue = parseInt(selectedValue);
var subaccSelectBox = $('subaccounts');
new Ajax.Request('/controller_name/action_name_here/', {
method: 'get',
parameters: {id: selectedValue},
onSuccess: function(transport) {
var options = transport.responseJSON;
for(var i = 0, len = options.length; i < len; i++) {
var opt = document.createElement('option');
opt.text = options[i].text;
opt.value = options[i].value;
subaccSelectBox.options.add(opt);
}
}
})

}

4) 将JSON对象返回到JS函数的控制器操作:

def action_name_here
id = params[:id]
info= Model.find(#whatever you want to do wit "id")
render :json => info
end

:onchange => "my_function(this)"

function my_function(obj) {
new Ajax.Request('/your/url', { parameters: obj.value })
}

最新更新