Rails:使用下拉菜单中的输入而不发布

时间:2010-12-16 21:18:25

标签: javascript ruby-on-rails drop-down-menu

一般来说,我对Rails和Web开发都很陌生。我需要显示两个下拉菜单,州和学校,这样学校才会在用户选择州后显示,学校应该只显示所选州的学校。我不知道的是我如何使用状态选择来动态决定要显示的学校,而无需用户点击提交。我知道我可能需要使用JavaScript,但不了解JS,我不确定如何做到这一点。希望我有意义。谢谢!

2 个答案:

答案 0 :(得分:3)

以下是基于JavaScript中已有的数据结构动态填充选择的a simple example。如果您需要在用户选择状态并返回学校列表后执行服务器请求,您将需要不同的代码(并且有助于像jQuery这样的库)。

答案 1 :(得分:2)

我认为你想用AJAX做这件事。我不打算为Rails 1定制这个,但你应该能够遵循这个想法。您的第一个下拉列表中有一个州列表,每个州都有一个学校列表。

// some js file that's loaded from your layout
// When your states dropdown is changed it fires an ajax call
var success = function(response) {
  for (var school in response.schools) {
    $('#schools_dropdown').html('');
    var option = $(document.createElement('option')).html(school.name).val(school.id);
    option.appendTo($('#schools_dropdown'));
  }
});

$('#states_dropdown').change(function() {
  $.get('/state/' + $(this).val() + '/schools', success);
});

# your schools controller
def index
  @schools = State.find(params[:id]).schools
  respond_to do |format|
    format.js { render :json => @schools }
  end
end

所以也许你没有jQuery,也许渲染json在Rails 1中有所不同......但是这个想法是一样的。你有一些javascript附加到你的状态下拉列表,这样当它改变时,你拉出该状态的id并向你的控制器发出一个AJAX调用。该AJAX调用的最后一个参数是一个成功函数,它循环通过控制器发回的所有学校,清除学校下拉列表,并逐个向下拉列表添加选项。