我的视图中有两个选择标记。
<%= select("cod_resource", "description_resource", Resource.all.collect {|p| [ p.description_resource, p.cod_resource] }) %>
<%= select("cod_damage", "description_damage", Damage.find_all_by_cod_resource_id(0).collect {|p| [ p.description_damage, p.cod_damage] }) %>
当用户选择第一个项目标记中的值时,我想更新第二个项目标记中的值。
我在这种模式下编辑代码:
<select id="resource" data-theme="c" onchange="changeValue(this)">
<%= Resource.find(:all).each do |r| %>
<option value="<%= r.cod_resource %>">
<%= r.description_resource %>
</option>
<% end %>
</select>
<select id="damage" data-theme="c">
<%= Damage.find_all_by_cod_resource_id(1).each do |r| %>
<option value="<%= r.cod_damage %>">
<%= r.description_damage %>
</option>
<% end %>
</select>
我在application.html.erb中添加了这个脚本:
function changeValue(obj){
$("#damage").append("<option>Hello</option>");
}
它有效,但如果我在这种模式下编辑
function changeValue(obj){
<%= Damage.find_all_by_cod_resource_id(1).each do |r| %>
$("#damage").append(" <option value='<%= r.cod_damage %>''><%= r.description_damage %></option>");
<% end %>
}
它不起作用。
答案 0 :(得分:0)
您必须触发ajax请求才能更新第二个选择框。 以下文章可帮助您执行此操作http://paramitech.com/dynamically-udating-select-list-using-jquery-and-ajax/
答案 1 :(得分:0)
答案 2 :(得分:0)
在浏览器中检查select标记,Rails将在表单标记
中提供指定的id或类<%= select("cod_resource", "description_resource", Resource.all.collect {|p| [ p.description_resource, p.cod_resource] }) %>
<%= select("cod_damage", "description_damage", Damage.find_all_by_cod_resource_id(0).collect {|p| [ p.description_damage, p.cod_damage] }) %>
查找select标记的ID或类名称,然后尝试使用此代码
$('first_select_tag_id/class').change(function(){
alert($('this').val());
}
$('second_select_tag_id/class').change(function(){
alert($('this').val());
}
答案 3 :(得分:0)
谢谢我用ajax请求解决了我的问题:
这是我的ajax请求:
<script>
function changeValue(obj){
resource_id = $("#resource").val();
$.ajax({
type: "GET",
url: "/reports/",
data: "resource_id="+resource_id,
success: function(html){
var part= $("<div/>").append(html).find('#damage_list').html();
$("#damage_list").html(part);
}
});
}
</script>
这是html部分的代码
<select id="resource" data-theme="c" onchange="changeValue(this)">
<%= Resource.find(:all).each do |r| %>
<option value="<%= r.cod_resource %>">
<%= r.description_resource %>
</option>
<% end %>
</select>
<!-- Home -->
<div id="damage_list">
<select id="damage" data-theme="c">
<%= Damage.find_all_by_cod_resource_id(params[:resource_id]).each do |r| %>
<option value="<%= r.cod_damage %>">
<%= r.description_damage %>
</option>
<% end %>
</select>
</div>
这是工作!!! 有一个小问题,它不会在选择框中重新加载JQuery Mobile样式。 我搜索了这个问题,但我找到的所有解决方案都不起作用。