jquery - 如果 url 查询字符串匹配,则设置选项 'selected'

标签 jquery drop-down-menu html-select

我有一个选择框,可以过滤页面上的数据库结果。每个选项的值都是查询字符串,以 ? 开头然后选择特定选项的相应名称/值对。像这样:

<select id="timeline-filter">
    <option value="log">Show All</option>
    <option value="?l=Previewed">Show Previewed</option>
    <option value="?l=Edited">Show Edited</option>
    <option value="?l=Downloaded">Show Downloaded</option>
    <option value="?l=Replaced">Show Replaced</option>
    <option value="?l=Deleted">Show Deleted</option>
</select>

例如,当用户选择“显示预览”等选项时,我需要执行两件事:

1) 我需要将页面重定向到 http://example.com/results?l=Previewed 2) 我需要将“显示预览”的选项设置为selected,以便下拉列表表明这是当前的过滤器。

我读过几十篇 jQuery 和 Javascript 文章,它们几乎已经达到了目标,但还没有完全实现。我花了 3 个小时研究这个问题并尝试了各种方法,包括使用检查器设置断点和观察变量,但我就是无法做到正确。下面的 HTML 和 jQuery 脚本完成了 #1,但没有完成 #2。

<select id="timeline-filter" onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);">
  <option value="log">Show All</option>
  <option value="?l=Previewed">Show Previewed</option>
  <option value="?l=Edited">Show Edited</option>
  <option value="?l=Downloaded">Show Downloaded</option>
  <option value="?l=Replaced">Show Replaced</option>
  <option value="?l=Deleted">Show Deleted</option>
</select>

<script>
  $(document).ready(function() {
    var queryString = window.location.href.slice(window.location.href.indexOf('?')).split('?');
    $("#timeline-filter > option").each(function() {
      if (this.value == queryString[0]) {
        this.selected = 'selected';
        /* ALTERNATE POSSIBILITY -- DOESN'T WORK EITHER
    $("#timeline-filter[value=this.value]").prop('selected',true)*/
      }
    });
  });
</script>

最佳答案

你已经差不多了,试试这个:-

$(document).ready(function() {
  var queryString = window.location.href.slice(window.location.href.indexOf('?'));
  $("#timeline-filter > option").each(function() {
    if (this.value == queryString) {
      this.selected = 'selected';
    }
  });
});

作为您的替代方案,请尝试以下操作:-

var queryString = window.location.href.slice(window.location.href.indexOf('?'));
$("#timeline-filter > option[value='" + queryString + "']").prop('selected', true)

测试如下

var href = "dfgdfgg.html?l=Replaced"

$(document).ready(function() {
  var queryString = href.slice(href.indexOf('?'));
  $("#timeline-filter > option").each(function() {
    if (this.value == queryString) {
      this.selected = 'selected';
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select id="timeline-filter" onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);">
  <option value="log">Show All</option>
  <option value="?l=Previewed">Show Previewed</option>
  <option value="?l=Edited">Show Edited</option>
  <option value="?l=Downloaded">Show Downloaded</option>
  <option value="?l=Replaced">Show Replaced</option>
  <option value="?l=Deleted">Show Deleted</option>
</select>

关于jquery - 如果 url 查询字符串匹配,则设置选项 'selected',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35181403/

相关文章:

Javascript 代码在 html 下拉选项元素中不起作用

css - 在 IE 中选择标签 - 正确的设计

javascript - 使用 jQuery 自动刷新

javascript - Chrome 中的 slimscroll 鼠标单击和滚动问题

javascript - 平移-旋转 : SVG not rotating around center even though translated:

html - 移动设备上的 Bootstrap 多级菜单问题

javascript - 在 JQuery slider handle 上放置字符

jsp - 使用 JSTL 为 JSP 下拉列表选择的值

delphi - 任何 TControl 的下拉菜单

reactjs - 当用户选择一个选项但随后将其更改为另一个选项时,React 崩溃而不显示错误