【问题标题】:Pre-select a dropdown in a form from an external URL link从外部 URL 链接预选表单中的下拉菜单
【发布时间】:2022-01-12 23:13:54
【问题描述】:

我有这个表单,我无法更改它的任何内容(ids、vals 等),因为它是由我的网站构建器自动生成的。是否可以使用代码甚至更好,只需使用 URL 自动选择一个选项?例如,使用 URL

https://mywebsite.com/GCValue=50/

在下面的表格中选择50 选项,而不是默认的10?我是 JS 和 JQuery 的初学者,所以如果可能的话,我很乐意使用它们并在此过程中稍微了解一下。

<select id=GCValue>
  <option val="10">10</option>
  <option val="25">25</option>
  <option val="50">50</option>
  <option val="100">100</option>
  <option val="250">250</option>
</select> <br />

任何帮助或指向我正确方向的外部链接表示赞赏。

【问题讨论】:

    标签: javascript html jquery forms


    【解决方案1】:

    更新

    这里是使用url查询参数的解决方案。

    // Your link should look like this: https://www.boothemusic.com/gift-card/?price=50
    
    const selectList = document.getElementById('GCValue');
    const queryString = window.location.search;
    const urlParams = new URLSearchParams(queryString);
    const price = urlParams.get('price'); // change "price" to anything you want.
    
    for (let option of selectList.options) {
      let chosen = option.value;
      if(chosen === price) {
        selectList.value = price;
      }
    }
    <select id="GCValue">
      <option value="10">10</option>
      <option value="25">25</option>
      <option value="50">50</option>
      <option value="100">100</option>
      <option value="250">250</option>
    </select>

    const price = urlParams.get('price'); 将与给定搜索参数关联的值分配给price(查看this article 以了解有关 URLSearchParams 的更多信息)。 然后for-of 循环浏览选择选项并查找price 变量的匹配项。如果任何选项匹配price(在这种情况下为50),则其值设置为price,因此在您的下拉列表中选择50

    【讨论】:

    • 感谢您的回复!我将如何使用 URL 来选择它?
    • @ThatBraxGuy 我可以知道您在哪里创建您的网站吗?
    • @junior_dev 有问题的页面是 boltemusic.com/gift-card
    • @ThatBraxGuy 我已经更新了我的答案。如果它有效,请不要忘记接受它。
    【解决方案2】:

    仅使用 JS 文档路径名中的一个变量

    使用window.location.pathname 获取当前页面的路径,然后使用简单的regex.exec(url) 捕获与/=([0-9])+/ 匹配的任何内容。这将匹配“=12345”格式的任何内容,并返回“12345”作为匹配项。

    var url = "https://mywebsite.com/GCValue=50/";
    // in reality, use this:
    // var url = window.location.pathname;
    var regex = /=([0-9]+)/g;
    var match = regex.exec(url);
    document.getElementById("GCValue").value = match[1];
    <select id="GCValue">
      <option val="10">10</option>
      <option val="25">25</option>
      <option val="50">50</option>
      <option val="100">100</option>
      <option val="250">250</option>
    </select> <br />

    使用 JS 文档路径名中的许多变量

    如果您想使用许多参数,只需扩展相同的逻辑即可。例如,想象一下:/GCValue=50/Page=765/Index=42/...

    var url = "https://mywebsite.com/GCValue=50/Page=765/Index=42/";
    // in reality, use this:
    // var url = window.location.pathname;
    var regex = /([A-Za-z0-9]+)=([0-9]+)/g;
    var match;
    while ((match = regex.exec(url)) != null) {
        document.getElementById(match[1]).value = match[2];
    }
    <select id="GCValue">
      <option val="10">10</option>
      <option val="25">25</option>
      <option val="50">50</option>
      <option val="100">100</option>
      <option val="250">250</option>
    </select> <br />
    
    <input id="Page" type="text"><br>
    <input id="Index" type="text">

    【讨论】:

    • 感谢您的回复!当我加载它时,它会出现一个 404,我是否需要在 URL 中的 GCValue 之前使用? 来解决这个问题?这似乎也不起作用。我想我不完全确定如何正确格式化。
    • @ThatBraxGuy 嘿嘿!因此,让您的服务器处理像 https://mywebsite.com/GCValue=50/ 这样的 URL 是一个不同的问题。我只在这里发布了 JS 解决方案。您可以使用?GCValue=50,但问题(JS 方面)只会变成equal difficulty(SO 解决方案)的不同问题。如果我的回答有助于解决您的 JS 问题(基于您的 q 标签),请接受让我知道。
    • 尝试运行时出现此错误:?GCValue=5/:330 Uncaught TypeError: Cannot read properties of null (reading '1') at ?GCValue=5/:330 using GCValue=5
    • @ThatBraxGuy 嘿,所以,这对我没有帮助,我需要查看您的代码才能知道会产生什么。我的意思是,我上面的代码演示完美运行,对吧?如果您在不同领域遇到新问题,我建议您发布一个新问题(或者,更好的是,只是在 SO 周围寻找答案)。 SO很棒,因为您可以找到快速问题的简短答案!不是因为大量问题有大量解决方案。用 SO 解决一个问题,标记正确/错误,冲洗/重复下一个问题。 =)
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多