【问题标题】:Drop Down menu option selected based on URL paramater根据 URL 参数选择的下拉菜单选项
【发布时间】:2017-08-05 03:29:29
【问题描述】:

我有一个网站,我几乎无法控制。

预设表单已选择我想设置不同的选项。

代码示例为:

<form id="myForm" action="https://secure.domain.net/account/order" method="post">
<table><tbody><tr class="paperTR tr_class_paper"><td class="paperTD fiTitle fiItem">
<div>Paper</div>
<select id="paper" name="paper" onchange="EC_LithoCalc.updateForm()">
<option value="1">Option1</option>
<option value="2">Option2</option>
<option value="3">Option3</option>
<option value="4">Option4</option>
</select>
</td></tr></tr></tbody></table>
</form>

我尝试了该示例的许多变体: domain.com/page?paper=1

但似乎没有什么对我有用。

我发现的所有内容都在谈论 javascript 或 jquery,但我对这些一无所知。不过,我知道编码应该以

我很困惑。

有谁能帮帮我吗?

我整天都在做这件事,如果有任何帮助,我将不胜感激。

谢谢。

【问题讨论】:

    标签: html


    【解决方案1】:

    如果不使用 JavaScript 代码,这是不可能(或几乎不可能)的。以下是使用 jQuery(这是一个 JavaScript 库)的示例:

    使用 jQuery 和新的 URL API,可以很容易地完成。您必须在 HTML 中包含 jQuery。这是一个nice article,关于如何在您的 HTML 上进行设置。

    因此,要获取查询参数值,然后将其设置为下拉值,您可以执行以下操作:

    $(document).ready(function() {
      // Construct URL object using current browser URL
      var url = new URL(document.location);
    
      // Get query parameters object
      var params = url.searchParams;
    
      // Get value of paper
      var paper = params.get("paper");
    
      // Set it as the dropdown value
      $("#paper").val(paper);
    });
    

    所以#paper 匹配select 元素的ID,然后将其选定值设置为查询参数中接收到的值。

    相关文章:


    更新

    我看到另一个库与 jQuery 冲突,因为 $ 似乎分配给了其他东西。要解决此问题,您可以尝试使用 jQuery 的noconflict。在您的 HTML 中包含 jQuery 的过程仍然保持不变。只需确保在使用 $ 作为别名的库之后加载 jQuery。

    您只需要像这样更改代码:

    // Relinquish control of `$` to previous library
    jQuery.noConflict();
    
    // Wrap jQuery code in IIFE
    (function($) {
      $(document).ready(function() {
        // Construct URL object using current browser URL
        var url = new URL(document.location);
    
        // Get query parameters object
        var params = url.searchParams;
    
        // Get value of paper
        var paper = params.get("paper");
    
        // Set it as the dropdown value
        $("#paper").val(paper);
      });
    })(jQuery);
    

    上面只是将前面的代码包装在IIFE 中,以防止它与其他库发生冲突。

    【讨论】:

    • 感谢您提供此信息。我阅读了 jQuery 信息并实现了它。使用创建表单的代码引用 jQuery 时似乎存在冲突。我能够测试 jQuery“Hello, World”,但是表单消失了,并且打破了似乎是 jQuery 元素的样式。我不确定是否适合在此处放置指向该页面的链接。请指教。
    • @Lost305 -- 是的,请!使用必要的详细信息和链接更新您的问题。
    • awesome... 有问题的 url 是:tightdesigns.net/products/businesscards 我只能访问一个后端表单,它只允许我编辑 HTML 和 HEAD。语言是 PHP,表单使用 POST,我不确定我应该提供哪些其他信息。
    • @Lost305 -- 我找不到您在链接评论中提到的问题。我建议创建一个包含必要细节的新问题,因为它会变得过于宽泛而无法解决错误,并且超出了这个问题的范围。
    • 对于任何混淆,我深表歉意。最初的问题保持不变。我只需要在此页面上获取表单:tightdesigns.net/products/businesscards-digital 以显示纸张选项中的第二个选项。
    【解决方案2】:

    您将 paper=1 设置为查询字符串参数,但这不会更改选择控件的值。您需要提取查询字符串参数的值,然后相应地设置选择控件。

    在JavaScript中检索查询字符串参数,可以参考本帖标记的答案How can I get query string values in JavaScript?

    一旦你在查询字符串参数中传递了值,你就可以在 JavaScript 中设置选择控件,如下所示:

    document.getElementById('paper').value = paperValue;
    

    其中paperValue 是保存传递给页面的值的变量。请务必在文档准备好时加载/执行设置所选值的功能。

    【讨论】:

    • 感谢您对 Maximo 的评论,但我不知道我在看什么或如何实现它。由于我不了解javascript,请您详细说明一下吗?
    • 我将标记的答案以及您编写的代码放在一个便笺中,并将其命名为 script.js。我尝试了以下网址 ?paper=251 ?paperValue=251 ?value=251 但没有任何效果。
    • 另外,它显示了这个...... Uncaught ReferenceError: paperValue is not defined
    • @Lost305 我做了一个简单的例子来展示如何让它工作;但是,我建议您阅读 JavaScript,以便了解它的工作原理。我放在一起的示例由一个带有四个选项的简单选择元素组成;如果页面加载时没有查询字符串参数或没有您期望的参数,则选择默认选择 (Option1)。如果在 URL 中传递了 paper 参数,则 select 选项会根据 paper 参数的值进行更改。您可以从我创建的这个小提琴中获取代码。 jsfiddle.net/8zj34pkb/1
    • 谢谢你的这个例子。我阅读了 31Piy 提供的 jquery 基础知识,所以当我得到“HELLO WORLD”工作时,我了解了一些需要什么才能工作在页面上。在您提供的示例中,我感到困惑的是,该选项已在 html 中被选中。另一个问题是,我无法编辑显示表单的 html,以将 Select ID 从纸质更改为纸质选择器,如您的示例所示。
    【解决方案3】:

    您提供了一个额外的&lt;/tr&gt;,应该将其删除。

    您需要使用提交按钮提交该表单。你的完整代码应该是这样的

    <form id="myForm" action="https://secure.domain.net/account/order" method="post">
      <table>
       <tbody>
        <tr class="paperTR tr_class_paper">
         <td class="paperTD fiTitle fiItem">
          <div>Paper</div>
          <select id="paper" name="paper" onchange="EC_LithoCalc.updateForm()">
           <option value="1">Option1</option>
           <option value="2">Option2</option>
           <option value="3">Option3</option>
           <option value="4">Option4</option>
          </select>
         </td>
        </tr>
       </tbody>
      </table>
      <input type="submit" value="Submit">
    </form>
    

    【讨论】:

      【解决方案4】:

      如果您不使用任何服务器语言,如 ASP 或 PHP,那么完成这项工作的唯一方法是使用 Javascript 或 jQuery。可以设置在页面完全加载后运行。

      <script>
          if (document.readyState == 'complete') {
              var item = document.getElementById('paper').value;
              var items = document.getElementById('paper').options;
              for (var x = 0; x < items.length; x++) {
                  if (items[x].value == item) {
                      items[x].setAttribute('selected', true);
                  }
              }
          } else {
              items[x].removeAttributes('selected');
          }
      </script>
      

      更新 1:

      您似乎真的只想默认选择一个选项,所以只需在所需的选项标签中添加“selected”参数。

      <option value="default" selected="selected">Default value</option>
      

      如果任何其他选项标签具有相同的参数,请将其删除。

      【讨论】:

      • 谢谢,我把代码放到网页里了。当我调用 domain.com?paper=251 时,它不会更改表单。我做错了什么?
      • 您的表单使用 Post 方法,而不是 Get。此外,更改选择标签中的选定值仅适用于编辑视图/页面,因为它需要数据库或其他数据源才能知道当时记录的选项。长话短说,这仅在/如果您使用服务器语言时才有效。如果这是一个简单的 HTML 页面,只需在要默认选择的选项标签中添加 selected=&amp;quot;selected&amp;quot; 即可。或者把form标签里的action地址改成这个页面本身,加上我在答案里放的脚本。
      • 我不确定如何确定网站是否使用 POST 和 GET,但由于有一个数据库,我会假设它是 GET。该网站使用 PHP,但我无权访问 PHP 文件或数据库。我只是提供了一个后端表单来更改 HTML,包括 HEAD。
      • method 标记中的 &lt;form&gt; 参数将决定页面使用 GET 还是 POST。如果您对 PHP 和 SQL 知之甚少,请尽可能去学习它。如果是这种情况,只需像这样重写表单标签:
        并在其中放置一个提交按钮: 另外将我在答案中写的脚本添加到您的&lt;body&gt; 标签的末尾。
      • 感谢您提供的信息。我查看了代码,表单具有 POST 方法。我无法编辑表格。由于我无法编辑表单,因此我希望有一个预选选项,而不是默认的带参数的 url。
      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 2022-11-17
      相关资源
      最近更新 更多