Rails - 通过选择下拉菜单执行ajax调用

时间:2017-06-22 07:07:25

标签: javascript jquery ruby-on-rails ajax

我有一个包含select标记的视图,它不是表单的一部分,只是一个独立的下拉菜单。单击其中一个选项我想执行ajax调用

这是选择标记

<%= select_tag 'application_stage', options_for_select(application.job.hiring_procedure.hiring_procedure_stages.map{ |p| [p.name, p.id] }), prompt: "Hiring stage", class: 'input-block-level chzn-select hiring_stage_dropdown', id: 'hiring_stage_dropdown' %>

这是一个基本的jquery,我试图通过它来检测更改

    jQuery(function($) {
        console.log('clicked');
        $("#hiring_stage_dropdown").click(function() {
            var state = $('select#hiring_stage_dropdown :selected').val();
            console.log(state);
        });
    })

但是当我选择其中一个选项时没有任何反应,我知道ajax代码不存在,但我现在想要的是在选择其中一个选项时在控制台中看到一些东西。

我在这里缺少什么?

这就是选择的样子

<select class="input-block-level chzn-select hiring_stage_dropdown" id="hiring_stage_dropdown" name="application_stage">
  <option value="">Hiring stage</option>
  <option value="3">Manager Step 1</option>
  <option value="4">Manager Step 2</option>
</select>

2 个答案:

答案 0 :(得分:3)

从选择下拉列表中选择项目时执行AJAX调用是通过jquery-ujs内置到Rails中。

首先,确保您的Gemfile中有gem 'jquery-rails',并且application.js清单文件中有//= require jquery_ujs(默认情况下它们都在那里)。

然后将data-remotedata-urldata-method属性添加到您的选择中。 jquery-url将序列化select的值并发出请求。您的select_tag代码可能如下所示:

<%= select_tag(
  'application_stage',
  options_for_select(
    application.job.hiring_procedure.hiring_procedure_stages.map{ |p| [p.name, p.id] }
  ),
  prompt: "Hiring stage",
  class: 'input-block-level chzn-select hiring_stage_dropdown',
  id: 'hiring_stage_dropdown',
  data: {
    remote: true,
    url: '/your_path',
    method: 'get'
  }
) %>

选择值后,jquery-ujs会向GET发出/your_path?application_stage=:selected_value个请求。然后,您可以在js.erb响应中处理此问题。

答案 1 :(得分:1)

尝试使用以下代码,这将有效:使用change事件代替click

&#13;
&#13;
//jQuery(function($) {
        $("#hiring_stage_dropdown").on("change",function() {
            var state = $(this).val();
            alert(state);
        });
//    })
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<select id="hiring_stage_dropdown">
<option value="-1">Select Any Option </option>
<option value="Option 1">Option 1</option>
<option value="Option 2">Option 2</option>
<option value="Option 3">Option 3</option>
</select>
&#13;
&#13;
&#13;