Jquery 为\u选择动态更新选项\u

Jquery 为\u选择动态更新选项\u,jquery,html,ruby-on-rails,Jquery,Html,Ruby On Rails,我想根据在第一个选择选项上选择的内容填充第二个选择选项。我知道如何使用传统的jquery和html来实现它。但我想知道是否还有其他方法,我只需更新选项就可以了 如您所见,我在第一个选项中有一个辅助函数city_for_select。我想对第二个也使用同样的方法。我将感谢任何帮助。比你强 <div class="col-md-4"> <%= f.label t('city'), class: "form-control-label" %><br>

我想根据在第一个选择选项上选择的内容填充第二个选择选项。我知道如何使用传统的jquery和html来实现它。但我想知道是否还有其他方法,我只需更新选项就可以了

如您所见,我在第一个选项中有一个辅助函数city_for_select。我想对第二个也使用同样的方法。我将感谢任何帮助。比你强

<div class="col-md-4">
    <%= f.label t('city'), class: "form-control-label" %><br>
    <%= f.select :city, options_for_select(city_for_select), {}, class: "form-control", id: "city" %>
</div>
<div class="col-md-4">
    <%= f.label t('area'), class: "form-control-label" %><br>
    <%= f.select :area, options_for_select(["Plz select"]), {}, class: "form-control", id: "area" %>
</div>

您必须将第二个选项提取到控制器方法中。然后,当第一次选择更改时,使用一些JS调用所述方法。使用jQuery替换/设置第二个选项的HTML

就像你说的。与传统HTML/jQuery的原理相同,但HTML将来自rails控制器

控制器:

def update_select
  # Your query here
  # Populate @t
end
查看更新_select.js.erb:

$("#sencond_select").html("<%= j render partial: 'update_select' %>");
部分更新选择.html.erb:

<div class="col-md-4">
  <%= label_tag t('area'), nil, class: "form-control-label" %><br>
  <%= select_tag :area, options_for_select(["Plz select"]), class: "form-control", id: "area" %>
</div>

您必须将第二个选项提取到控制器方法中。然后,当第一次选择更改时,使用一些JS调用所述方法。使用jQuery替换/设置第二个选项的HTML

就像你说的。与传统HTML/jQuery的原理相同,但HTML将来自rails控制器

控制器:

def update_select
  # Your query here
  # Populate @t
end
查看更新_select.js.erb:

$("#sencond_select").html("<%= j render partial: 'update_select' %>");
部分更新选择.html.erb:

<div class="col-md-4">
  <%= label_tag t('area'), nil, class: "form-control-label" %><br>
  <%= select_tag :area, options_for_select(["Plz select"]), class: "form-control", id: "area" %>
</div>

这是另一种做事方式。在添加控制器函数和相关路由之后,我使用jquery和json调用函数并在select选项中加载。不需要在这里渲染分部

控制器:请注意,您必须以json格式返回数据

Javascript:

function populate_area(city_name){
  $.get("/get_area_for_city", {city: city_name}, function(data){
    var $area = $('#area');
    $area.empty();
    for (var i = 0; i < data.areas.length; i++) {
      $area.append('<option value=' + data.areas[i] + '>' + data.areas[i] + '</option>');
    }
  }, "json");
}
$(document).ready(function () {
  $("#city").change(function () {
      var val = $(this).val();
      if (val == "city1") {
          populate_area("city1");
      } else if (val == "city2") {
          populate_area("city2");
      } else if (val == "city3") {
          populate_area("city3");
      }
  });
});

问题中已经给出了HTML。

这是另一种处理问题的方法。在添加控制器函数和相关路由之后,我使用jquery和json调用函数并在select选项中加载。不需要在这里渲染分部

控制器:请注意,您必须以json格式返回数据

Javascript:

function populate_area(city_name){
  $.get("/get_area_for_city", {city: city_name}, function(data){
    var $area = $('#area');
    $area.empty();
    for (var i = 0; i < data.areas.length; i++) {
      $area.append('<option value=' + data.areas[i] + '>' + data.areas[i] + '</option>');
    }
  }, "json");
}
$(document).ready(function () {
  $("#city").change(function () {
      var val = $(this).val();
      if (val == "city1") {
          populate_area("city1");
      } else if (val == "city2") {
          populate_area("city2");
      } else if (val == "city3") {
          populate_area("city3");
      }
  });
});

问题中已经给出了HTML。

你好,罗斯兰,谢谢你的回答。但这就是我被困的地方。您知道用jquery更新选项的确切代码是什么吗?我试过类似的东西$area.options\u用于\u selecthelper\u功能,不起作用。您好,非常感谢。我实际上是在尝试或寻找不同的东西。看看我的答案。这与我调用控制器函数的意义相同。但加载数据部分有点不同。让我知道你的想法?嗨,罗斯兰,谢谢你的回答。但这就是我被困的地方。您知道用jquery更新选项的确切代码是什么吗?我试过类似的东西$area.options\u用于\u selecthelper\u功能,不起作用。您好,非常感谢。我实际上是在尝试或寻找不同的东西。看看我的答案。这与我调用控制器函数的意义相同。但加载数据部分有点不同。让我知道你的想法是什么?这是一个比我更好的方法,因为你可以很容易地交换视图层,或者更容易地移动到js框架,而不涉及返回的部分等等。做得好!非常感谢。我很欣赏你的意见:非常干净和简单的解决方案,我喜欢这种方法。这是一种比我更好的方法,因为你可以轻松地交换视图层,或者更容易地移动到js框架,而不必触及返回的部分等等。做得好!非常感谢。我感谢您的意见:非常干净和简单的解决方案,我喜欢这种方法。