簡單地說, 我有2個下拉列表。 第一個賬戶。Rails 2.3.x使用Prototype.js和「select」助手進行Ajax調用
我想要做的是:從第一個下拉列表中選擇一個帳戶,選擇所選帳戶的ID,使用該「id」從db獲取信息,然後用「Ajax調用」填充第二個下拉列表」。
聽起來很簡單,但我無法建立關係。
的Rails:2.3.5 JS:的Prototype.js 紅寶石:1.8.7
降下來,我嘗試使用(我真的不知道什麼是怎麼回事:平變化)
<%= select :account, :id
@accounts.map{ |a| [ a.company a.id ] },
{ :include_blank => "--Select Account--"},
:onchange => my_function() #I guess
%>
我的控制器名稱:用戶,操作:search_user
問題:如何選定的賬戶的ID發送到我的控制器,然後填充第二個下拉,我應如何修改「:平變化=>創建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代碼,以使阿賈克斯打電話填充第二下拉:
<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
它不工作是什麼「這個」軌在視圖中不也認識到它「未定義方法「錯誤生成。也許是因爲版本的差異。 – bkdir
更新了我的答案。函數調用應該在引號內。它是一個js方法調用。 – Santhosh
感謝您的糾正,「這」仍然是不必要的,但主要想法爲我工作。我會盡量發佈完整的正確答案。 – bkdir