javascript - 为什么我无法使用 URL 参数设置选择选项的值?

标签 javascript jquery

我正在尝试通过与选择关联的 url 参数来设置选择选项的值。我能够毫无问题地对参数的值进行硬编码,如果我尝试通过 JavaScript 以编程方式设置该值,则不会选择这些选项。

假设以下网址:

http://127.0.0.1:8000/dashboard?date_range=ytd&treatments=%5B"1"%2C"15"%5D

我的选择:

<select id="dashboardTreatmentSelector" class="js-example-basic-multiple- form-control" name="treatments[]" multiple="multiple">
<option></option>
<option id="1" data-id="1" value="1">dsfrets</option>
<option id="2" data-id="2" value="2">Aphid Treatment</option>
<option id="15" data-id="15" value="15">boom pow surprise</option>
</select>

我使用以下方法来获取 url 参数的值:

$.urlParam = function (name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.search);

return (results !== null) ? results[1] || 0 : false;
}

使用以下方法设置值:

function setValuesBasedOnParams(){
var date_range = $.urlParam('date_range');
var treatments = $.urlParam('treatments');

if(date_range){
    $(".btn_dateRangeSelector").removeClass("btn-primary");
    $("#daterange_"+date_range).addClass("btn-primary");
}
if(treatments){
    var t = decodeURIComponent(treatments);
    var treatments_value = t.replace(/\"/g, "");
    console.log(treatments_value);
    $("#dashboardTreatmentSelector").val(treatments_value);
}
}

参数的值正确地打印到控制台:[1,15]。

我可以手动将控制台中的值输入到我的代码中,然后选择选项:

$("#dashboardTreatmentSelector").val([1,15]);

如果我使用变量treatment_value...打印到控制台的变量,则不会选择选项。

有人有什么想法吗?

谢谢。

最佳答案

我认为treatments_value是一个字符串。尝试在 $("#dashboardTreatmentSelector").val() 中使用 JSON.parse:

$.urlParam = function(name) {
  var url = 'http://127.0.0.1:8000/dashboard?date_range=ytd&treatments=%5B"1"%2C"15"%5D';
  var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(url);
  return (results !== null) ? results[1] || 0 : false;
}

function setValuesBasedOnParams() {
  var date_range = $.urlParam('date_range');
  var treatments = $.urlParam('treatments');

  if (date_range) {
    $(".btn_dateRangeSelector").removeClass("btn-primary");
    $("#daterange_" + date_range).addClass("btn-primary");
  }
  if (treatments) {
    var t = decodeURIComponent(treatments);
    var treatments_value = t.replace(/\"/g, "");
    console.log(treatments_value);
    $("#dashboardTreatmentSelector").val(JSON.parse(treatments_value));
  }
}

setValuesBasedOnParams();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="dashboardTreatmentSelector" class="js-example-basic-multiple- form-control" name="treatments[]" multiple="multiple">
  <option></option>
  <option id="1" data-id="1" value="1">dsfrets</option>
  <option id="2" data-id="2" value="2">Aphid Treatment</option>
  <option id="15" data-id="15" value="15">boom pow surprise</option>
</select>

关于javascript - 为什么我无法使用 URL 参数设置选择选项的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57455717/

相关文章:

javascript - 鼠标悬停在框架中的所有元素上仅响应点击

javascript - mousedown 事件完成后销毁 bootstrap-popover

javascript - 如何在twitter api中的关注按钮回调函数中检索用户详细信息?

javascript - 通过 javascript 读取文本区域

javascript - 带有 AngularJS 指令的 Markdown

javascript - HTML 字体和粗体不在 IE 11 中呈现,但在 chrome 中工作 - 从 javascript 动态

javascript - 自动播放选项卡

javascript - D3 mousedown事件删除错误节点

javascript - PHP未定义索引(jquery文件上传导致)

javascript - 在jsx中使用split和map