javascript - 使用 Rails 3 和 jQuery 进行动态选择

标签 javascript jquery ruby-on-rails ruby-on-rails-3

我想使用 jQuery 动态填充下拉列表。我正在尝试调用 Controller 操作,但我不知道如何使用 collection_select 对象。我尝试过 :input_html 但 Controller 操作从未被调用。我在 javascript 调试器中收到解析错误,因为 javascript 正在尝试解析整个 View 页面。

View 中的代码:

<div id="ssmodels">
  <%= collection_select :ssmodel, :ssmodel, @ssmodels, :id, :name, :input_html => {:rel => "/phrases/update_submodel_select" }  %>
</div>

<div id="ssmodel_sssubmodel">
  <%= collection_select :ssmodel, :sssubmodel, @sssubmodels, :id, :name %>
</div>

Application.js 中的 JavaScript:

$.fn.subSelectWithAjax = function() {
  var that = this;
  this.change(function() {
    $.post(that.attr('rel'), {id: that.val()}, null, "script");
    return false;
  })
};

$(document).ready(function(){$("#ssmodels").subSelectWithAjax();
})


$(document).ready(function(){$("#ssmodel_sssubmodel").subSelectWithAjax();
})

请帮忙。

最佳答案

我认为最不显眼的方法是 js hook 是否不知道如何将所选值放入要调用的 url 中。

所以我解决了这个普遍问题:

application.js:在 livehook/documentready 函数的主体中:

$('select[data-observe-url]').change(function() {
     var selected = $(this).find(':selected').val();
     var url = $(this).attr('data-observe-url').replace('%(selected)',selected)
     $.get(url)
     return false;
});

然后你的 html 是:

<select id="signup_course_id" name="signup[course_id]" data-observe-url="http://localhost:3000/courses/%(selected)/select" >
<option value="">Choose Class</option>
<option value="1">excel 2007</option>
</select>

它是用 formattastic 生成的,例如:

form.input :course, :collection => Course.all, :include_blank => 'Choose Class', 
      :input_html => { 'data-observe-url' => select_course_url('%(selected)') }

将 %(selected) 视为 url 中类似格式字符串的参数,jquery 使用 $(this).find(':selected') 将其替换为所选值

关于javascript - 使用 Rails 3 和 jQuery 进行动态选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5406837/

相关文章:

javascript - drawImage() 不工作 - Firebug 显示 : NS_ERROR_XPC_BAD_CONVERT_JS

javascript - 如何在 JavaScript 中深度复制自定义对象?

jquery - 当服务器响应 true 或 false 时如何检查 ajax 是否成功?

javascript - 仅显示 div(预加载器)一次 - 直到清除缓存/ session

jquery - (jQuery) 如何在可滚动的 div 中的元素在滚动时出现动画?

javascript - 如何将angularjs变量值赋给html元素属性,比如input元素的name属性

javascript - 引用 Express API 的 javascript 数组中的子对象

ruby-on-rails - 删除 Assets 预编译的console.log

javascript - Rails, "respond_to do |format|"返回 ActionController::UnknownFormat

ruby-on-rails - 测试用例中的随机查询执行时间