【问题标题】:Rails 2.3.x Ajax call by using Prototype.js and "select" helperRails 2.3.x Ajax 调用使用 Prototype.js 和“选择”助手
【发布时间】: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 版本很旧)。所以任何答案都会有很大帮助。

解决方案:

感谢SantoshUmut 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


    【解决方案1】:

    :onchange =&gt; "my_function(this)"

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

    【讨论】:

    • 它不起作用什么是“this” rails 在视图中无法识别它,还会生成“undefined method”错误。可能是版本不同吧。
    • 更新了我的回答。函数调用应该在引号内。它是一个 js 方法调用。
    • 感谢您的更正,“这个”仍然没有必要,但主要思想对我有用。我将尝试发布完整的正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多