【发布时间】:2014-01-08 16:38:39
【问题描述】:
简单地说, 我有 2 个下拉列表。 第一个有帐户。
我想要做的是:从第一个下拉列表中选择一个帐户,获取所选帐户的 id,使用该“id”从数据库中获取信息,然后用“Ajax call”填充第二个下拉列表.
听起来很简单,但我无法建立关系。
导轨:2.3.5 JS:原型.js 红宝石: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) 用于进行 Ajax 调用并填充第二个下拉列表的 Prototype.js 代码:
<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
【问题讨论】:
标签: ruby-on-rails ajax drop-down-menu prototypejs