【问题标题】:Setting multiple values for option select and get them with jQuery为选项选择设置多个值并使用 jQuery 获取它们
【发布时间】:2014-09-14 15:05:37
【问题描述】:

我正在尝试为一个选择选项分配两个值,并根据后续单选按钮的结果选择一个或另一个。

例如,在此示例中,我使用了 2 种不同的衬衫,根据您选择的衬衫尺寸,有两种不同的价格。 我知道这段代码不起作用,可能是因为“value1”和“value2”,但我只是把它放在这里来说明我想要实现的目标。

http://jsfiddle.net/Shibi/o2hftb6e/3/

任何帮助都会很棒。谢谢!

HTML

<select id="shirts">
    <option>Choose shirt</option>
    <option value1="15" value1="20">Shirt 1</option>
    <option value1="20" value1="25">Shirt 2</option>
</select>
<div>
    <input type="radio" name="1" value="small" />Small
    <input type="radio" name="1" value="medium" />Medium</div>
<div id="priceSummary"></div>

JS

$('#shirts').on('change', function () {

    var selectedShirtText = $("#shirts :selected").text();
    var selectedShirtValue = $("#shirts :selected").val();

    $("#priceSummary").text(selectedShirtText ? ("Price of: " + selectedShirtText + " " + "$" + selectedShirtValue) : "");

});

【问题讨论】:

  • 变量不匹配并在# 中丢失$("priceSummary")
  • 谢谢,变量不匹配是什么意思?
  • selectedShirtTextValue selectedShirtText
  • value1 不是有效的 HTML 属性。你的意思是使用value?您对场景的处理方式也存在问题——您的设计表明衬衫 1 和 2 可能是相互排斥的选项。
  • 对,我只是使用 value1 和 value 2 来说明我希望实现的目标。是的,在这个特定的 sn-p 中,衬衫 1 和 2 是相互排斥的。

标签: javascript jquery select options


【解决方案1】:

以下是我解决您问题的建议:

  1. &lt;select&gt; 和单选按钮上收听.change() 事件,因为您永远不知道用户会先选择哪一个。
  2. 不要使用value1value2,而是使用HTML5的data-属性来存储不同大小的价格。
  3. .change() 事件被触发时,嗅探所选衬衫的种类,并根据单选按钮的值指定的data- 属性获取正确的尺码价格。
  4. 声明一个默认尺寸,这样您的价格就不会是不确定的。

所以你的 HTML 应该是:

<select id="shirts">
    <option value="">Choose shirt</option>
    <option value="Shirt 1" data-small="15" data-medium="20">Shirt 1</option>
    <option value="Shirt 2" data-small="20" data-medium="25">Shirt 2</option>
</select>
<div>
    <input type="radio" name="shirtSize" value="small" checked />Small
    <input type="radio" name="shirtSize" value="medium" />Medium
</div>
<div id="priceSummary"></div>

这是有效的演示:http://jsfiddle.net/teddyrised/o2hftb6e/8/

$('#shirts, input[name="shirtSize"]').on('change', function () {

    var selectedShirtText = $("#shirts :selected").val();
    var selectedShirtValue = $("#shirts :selected").attr("data-" + $('input[name="shirtSize"]:checked').val());

    $("#priceSummary").text(selectedShirtText ? ("Price of: " + selectedShirtText + " " + "$" + selectedShirtValue) : "");

});

【讨论】:

  • @Shibi 对 HTML 做了一点改动:确保第一个选项 &lt;option value=""&gt;Choose shirt&lt;/option&gt; 使用空值,这样 JS 的最后一行中的条件语句才能正常工作。也更新链接到新小提琴。
【解决方案2】:

刚刚做了一个Fiddle 并进行了一些调整

$('#shirts').on('change', function () {
  var selectedShirtText = $("#shirts :selected").text();
  var selectedShirtValue = $("#shirts :selected").val();
  var size = $("input[type='radio']:checked").val();
  var selectedShirtPrize = $("#shirts :selected").data("price" + size);
$("#priceSummary").text(selectedShirtText ? ("Price of: " + selectedShirtText + " " + "$" + selectedShirtPrize) : "");
});

用于 HTML 调整之类的

<option data-price1="15" data-price2="20" value="1">Shirt 1</option>

这只是一个可以最终确定的示例 - 当前选择 small/medium 而不是 Shirt1 或 Shirt2,价格将从所选选项的匹配 data-price1 或 data-price2 属性中检索。没错,将 value1 和 value2 属性分配给选项是行不通的,因为这不是有效的 HTML。只需使用data- 属性就可以解决这个问题。

更新小提琴:Fiddle
如果没有选择衬衫,则不会显示文字/价格。将 value="0" 分配给默认选项:

<option value="0">Choose shirt</option>

并仅在if(selectedShirtValue !== 0)的情况下打印文本/价格

【讨论】:

  • 太棒了!但是,当在下拉列表中的衬衫类型之后选择单选按钮时,此示例将 selectedShirtPrize 输出为 $undefined。知道为什么吗?
  • 当然,如前所述,这只是一个需要最终确定的示例,只是想检查一下这是否适合您。问题是您希望该功能如何工作?如果显示默认的“请选择衬衫”选项,是否应该不添加价格?
  • 对,特里在上面给出了一个很好的选择,但我仍然很想知道我将如何按照你的方式去做,并且只有在下拉列表和收音机中都选择了一个值时才显示结果按钮。
  • 别介意。只是想指出使用 data- 属性来解决多个值的问题;由于接受的答案也使用了这个,除了清理点击事件的方法并提供适当的信息,我不会进一步调整我的答案。
【解决方案3】:

我刚刚添加了一个新的属性名称 value1,它可以作为另一个值,具体取决于衬衫的尺寸。

<select id="shirts">
    <option>Choose shirt</option>
    <option value1="15" value="20">Shirt 1</option>
    <option value1="20" value="25">Shirt 2</option>
</select>
<div>
    <input type="radio" name="1" value="small" />Small
    <input type="radio" name="1" value="medium" />Medium
</div>

JS

$('#shirts').on('change', function () {
var size=$("input[name=1]").val();
var selectedShirtText = $("#shirts :selected").text();
if (size=='large')
    var selectedShirtValue = $("#shirts :selected").val();
else
    var selectedShirtValue = $("#shirts :selected").attr('value1');

$("#priceSummary").text(selectedShirtText ? ("Price of: " + selectedShirtText + " " + "$" + selectedShirtValue) : "");});

你可以运行这段代码here

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多