【问题标题】:Show/Hide multiple divs based on selected option - almost there根据所选选项显示/隐藏多个 div - 几乎就在那里
【发布时间】:2014-04-26 13:35:45
【问题描述】:

我有以下代码,这些代码是我从这里的帖子拼凑而成的,到目前为止它的工作...

<label>Number of Colours</label>
<select id="main-select">
    <option value="1">1 Colour</option>
    <option value="2">2 Colours</option>
    <option value="3">3 Colours</option>
    <option value="4">4 Colours</option>
</select>

<div class="colour-option" id="colour1">
<label>1st Colour</label>
<select>
    <option value="colour1">Colour One</option>
    <option value="colour2">Colour Two</option>
    <option value="colour3">Colour Three</option>
</select>
</div>

<div class="colour-option" id="colour2">
<label>2nd Colour</label>
<select>
    <option value="colour1">Colour One</option>
    <option value="colour2">Colour Two</option>
    <option value="colour3">Colour Three</option>
</select>
</div>

<div class="colour-option" id="colour3">
<label>3rd Colour</label>
<select>
    <option value="colour1">Colour One</option>
    <option value="colour2">Colour Two</option>
    <option value="colour3">Colour Three</option>
</select>
</div>

<div class="colour-option" id="colour4">
<label>4th Colour</label>
<select>
    <option value="colour1">Colour One</option>
    <option value="colour2">Colour Two</option>
    <option value="colour3">Colour Three</option>
</select>
</div>

连同下面的jQuery...

var showDiv = function (colour) {
$('.colour-option').hide();
$('.colour-option:lt(' + colour + ')').show();
};

$('#main-select').change(function () {
showDiv($(this).val());
}).change();

您可以在这里看到它的实际效果:http://jsfiddle.net/UWUYN/5/ 这正是我希望它工作的方式,但是,我的#main-select 是为我生成的,因此这些值不能简单地是 1、2、3、4。它们是 Shopify 购物车的一部分,我的 #main-select 输出的值是“1 个印台”、“2 个印台”、“3 个印台”和“4 个印台”。有没有一种简单的方法来编辑 JS 以考虑到这一点?

【问题讨论】:

    标签: jquery drop-down-menu show-hide


    【解决方案1】:

    如果值的格式是这样的话,你可以使用parseInt()

    showDiv(parseInt(this.value, 10));
    

    这将仅从值中获取整数部分,例如 1 来自 1 Ink Pad

    jsFiddle here

    【讨论】:

    • 太好了,谢谢!我能麻烦你解释一下这是在做什么吗?我只是想了解它的不同之处(我对 JS 很陌生)谢谢。 - 编辑,啊!你已经解释过了!谢谢!!! :)
    • 是否有可能以某种方式呈现未显示为禁用的输入或清除其值?这样做的一个陷阱是,如果我选择“四种颜色”并在每个下拉列表中选择一种,然后我改变主意并选择“2 种颜色”,它会隐藏最后两个选择,但它们的值会被保留。这意味着它们正在被传递到购物车。
    • @shorn 你试过用$('.colour-option').val("").hide();代替$('.colour-option').hide();
    • 谢谢,我试过了,但没有任何效果。它仍然保持与以前相同的值吗?
    • 只是考虑一下,但这是因为.colour-option 的目标是div,而不是实际的选择吗?
    【解决方案2】:

    首先,只是一个建议,IMO,添加和删除一个确定隐藏的类比使用 .hide 和 .show 更好

    除此之外。您可以使用 selects selectedIndex 或 options index 属性而不是它的值。

    var showDiv = function (colour) {
      $('.colour-option').hide();
      $('.colour-option:lt(' + colour + ')').show();
    };
    
    $('#main-select').change(function () {
      showDiv($(this).prop('selectedIndex') + 1);
    }).change();
    

    【讨论】:

    • 也谢谢你。
    • 您是否碰巧有一个可以添加/删除隐藏类的示例?
    • 在你的 CSS 中添加 .hidden { display:none;代替 .hide() 使用 $('colour-option').addClass('hidden') 代替 .show() 你可以使用 .removeClass('hidden') 或 .toggleClass('hidden'),两者都可以.
    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多