【问题标题】:Converting a text input to a select element with JavaScript使用 JavaScript 将文本输入转换为选择元素
【发布时间】:2012-06-25 16:00:01
【问题描述】:

我正在托管电子商务平台上进行一些前端开发。系统向客户发送一个文本输入,以选择他们想要添加到购物车的商品数量,但我更喜欢选择。我无法访问系统在这方面吐出的标记,所以我想使用 JavaScript 将文本 input 更改为 select 元素。

我使用 jQuery 删除了 select 并使用具有正确选择的 select 复制了 input 元素,但是当我尝试将某些内容添加到我的购物车时,无论选择中的选择如何,都只添加了一项。

这是本机标记:

<div id="buy-buttons">
  <label>Quantity:</label>
  <input name="txtQuantity" type="text" value="1" id="txtQuantity" class="ProductDetailsQuantityTextBox">
  <input type="submit" name="btnAddToCart" value="Add To Cart" id="btnAddToCart" class="ProductDetailsAddToCartButton ThemeButton AddToCartThemeButton ProductDetailsAddToCartThemeButton">
</div>

这是我正在运行以更新我的标记的 jQuery。

 $("#txtQuantity").remove();
 $("#buy-buttons").append('<select id="txtQuantity" type="text" value="1" class="ProductDetailsQuantityTextBox"></select>');
 $("#txtQuantity").append('<option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option>');

有谁知道为什么这不起作用?选择不应该以与文本输入相同的方式通过表单提交信息吗?

谢谢!

【问题讨论】:

    标签: javascript jquery forms


    【解决方案1】:

    使用replaceWith 代替removeappend。此外,&lt;select&gt; 上的 type 属性是不必要的,&lt;option&gt; 节点应该在 &lt;select&gt; 内。这是replaceWith - http://api.jquery.com/replaceWith/ 上的文档。

    $("#txtQuantity")
        .replaceWith('<select id="txtQuantity" name="txtQuantity" class="ProductDetailsQuantityTextBox">' +
              '<option value="1">1</option>' +
              '<option value="2">2</option>' +
              '<option value="3">3</option>' +
              '<option value="4">4</option>' +
              '<option value="5">5</option>' +
            '</select>');
    

    【讨论】:

    • 谢谢,不知道这个jQuery方法。
    【解决方案2】:

    您尚未设置字段名称。将name='txtQuantity' 添加到选择中。如果没有 name 属性,该字段的值将不会被发送回服务器。

    另外,不要在选择上设置value='1'(它没有做任何事情),而是将selected='selected' 添加到第一个选项。结果与默认选择第一个选项相同。

    您大概会在使用上述代码的提交按钮后选择选择。但是,这已在另一个答案中涵盖。

    【讨论】:

    • 谢谢!不确定我是否错过了该属性。
    【解决方案3】:

    &lt;select&gt; 中删除typevalue 属性,并添加您遗漏的name="txtQuantity" 属性。

    【讨论】:

      【解决方案4】:

      如果您已经有一个下拉/选择列表,并且只想从标签/文本框中添加一个项目,那么您可以试试这个:

       if ($(textBoxID).val() != '') {
                      $(dropDownID)
                          .append($("<option></option>")
                              .attr('value', ($(textBoxID).val()))
                                  .text($(textBoxID).val())).val($(textBoxID).val())
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 2011-09-09
        • 2012-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多