如何正确使用JavaScript过滤下拉框? - javascript

长期潜伏在现场,第一次张贴。我发现线程可以解决我的问题,但只能部分解决。这是问题所在。

我有一个非常简单的网站,包含一些文本和两个下拉框。我在服务器端使用Flask的Python 3.4,在客户端使用一些嵌入式JavaScript的一些简单HTML。第一个下拉列表的目的是过滤第二个下拉列表。

第一个列表编码为:

<select id = "myState" name = "myState">
  <option selected = "selected">Select state...</option>
  <option value = "GA">Georgia</option>
  <option value = "NC">North Carolina</option>
  <option value = "TN">Tennessee</option>
  <option value = "VA">Virginia</option>
  <option value = "MD">Maryland</option>
  <option value = "PA">Pennsylvania</option>
  <option value = "NJ">New Jersey</option>
  <option value = "NY">New York</option>
  <option value = "CT">Connecticut</option>
  <option value = "MA">Massachusetts</option>
  <option value = "VT">Vermont</option>
  <option value = "NH">New Hampshire</option>
  <option value = "ME">Maine</option>
</select>

同时,第二个列表具有285个条目,并通过Flask列表变量进行编码,如下所示:

<select id = "myShelter" name = "myShelter" onchange = "window.location.href = '/forecast/loc_id=' + document.getElementById('myShelter').value;">
  <option selected = "selected" disabled = "disabled" class = "labelText">Select location...</option>
  {% for o in shelter_list %}
  <option value = "{{ o[0] }}" class = "{{ o[4] }}" {{ o[3] }}>{{ o[1] }}</option>
  {% endfor %}
</select>

{{ o[4] }}包含状态缩写,因此当从第一个列表中进行选择以将第二个列表过滤到所选内容时,以下JavaScript使用选项列表的类进行过滤:

<script>
  $(document).ready(function() {
    var allLocations = $('#myShelter option')
    $(myState).change(function() {
      var currState = document.getElementById("myState").value;
      var currStateLocations = allLocations.filter('.' + currState);
      $('#myShelter option').remove();
      $.each(currStateLocations, function (i, j) {
        $(j).appendTo('#myShelter');
      });
    });
  });
</script>

JavaScript只是将第二个列表中的所有285个条目拉入一个变量,清除列表,然后使用第一个列表中的选择来向下过滤285个条目,然后仅将过滤后的项放回去。

第一次就可以正常工作;但是,在第一个列表中进行任何后续选择时,它均不起作用,因为$('#myShelter option')现在仅包含过滤后的列表。如果您是第一次选择“北卡罗莱纳州”,然后又想使用“弗吉尼亚州”,则该列表将不起作用,因为该列表现在仅包含“北卡罗莱纳州”条目。

解决这个问题的最佳方法是什么?我想以其他方式将完整列表拉入JavaScript,以使它不依赖于下拉列表中已有的内容,但是我不确定该怎么做。也许Flask {{ }}变量?非常感谢。

参考方案

将285个条目加载到全局JS变量中,然后在构建第二个下拉框时,针对该全局变量对其进行过滤,以使其保持完整。

其他打开时关闭选项 - javascript

我有这样的html代码与echo一起打印: <input id="58" readonly="readonly" class="cell_to_edit" value="Accepted"> <span id="58" class="…

Telerik单选按钮所需的字段验证器 - javascript

如何设置Telerik单选按钮所需的字段验证器?我想在按钮单击“ BtnSave”上设置必填字段验证器吗?请帮忙!<telerik:RadButton ID="radio_male" runat="server" ToggleType="Radio" AutoPostBack="fa…

表单不提交或按钮提交不起作用 - javascript

据我所知,此代码必须有效,但是我编码时却无效问题在于该表单未提交。我该如何解决?选中时,我什至没有得到复选框的值。<table id="example" class="display" cellspacing="0" width="100%"> <thead&g…

在PHP文件中调用javascript函数并在加载HTML文件之后? - javascript

我需要在我的php中调用js函数,但无法正常工作。有人可以告诉我我在做什么错吗?我该如何轻松地做到这一点?谢谢!我有三个文件:  mail.php负责发送$ _POST的内容(工作正常)。我调用我的javascript函数来切换模式,具体取决于邮件是否已发送。 <? ... $response = $sendgrid->send($email);…

如何使用PHP从动态输入字段捕获数组值? - javascript

我正在编写一个在线时间跟踪网页,允许用户将学习时间输入该系统。用户将首先输入名称,然后根据日期输入学习时间。一天中可能会有多个学习时间。以下是我第一页的编码,<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"…