使用 JavaScript 将文本输入转换为选择元素

Converting a text input to a select element with JavaScript

本文关键字:选择 元素 转换 输入 JavaScript 文本 使用      更新时间:2023-09-26

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

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

下面是本机标记:

<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>');

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

谢谢!

使用 replaceWith 而不是 removeappend 。 此外,<select>上的type属性是不必要的,<option>节点应该在<select>内。 这是关于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>');

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

此外,不要在选择上设置value='1'(这不执行任何操作),而是将selected='selected'添加到第一个选项。 结果与默认选择第一个选项的结果相同。

您可能最终会在带有上述代码的提交按钮之后进行选择。然而,这在另一个答案中已经涵盖。

如果您

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

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

<select>中删除typevalue属性,然后添加省略的name="txtQuantity"属性。