我有一个包含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>
答案 0 :(得分:3)
从选择下拉列表中选择项目时执行AJAX调用是通过jquery-ujs内置到Rails中。
首先,确保您的Gemfile中有gem 'jquery-rails'
,并且application.js清单文件中有//= require jquery_ujs
(默认情况下它们都在那里)。
然后将data-remote
,data-url
和data-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
//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;