如何阅读所选项目?

时间:2013-05-24 12:02:16

标签: javascript html

我的视图中有两个选择标记。

<%= 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 %>
  }

它不起作用。

4 个答案:

答案 0 :(得分:0)

您必须触发ajax请求才能更新第二个选择框。 以下文章可帮助您执行此操作http://paramitech.com/dynamically-udating-select-list-using-jquery-and-ajax/

答案 1 :(得分:0)

您有多种选择。您可以尝试使用.appen()。这是一个例子

http://jsbin.com/eguzeb/1/edit

注意:您必须使用Ajax来存档您需要的内容。

答案 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样式。 我搜索了这个问题,但我找到的所有解决方案都不起作用。