javascript - jQuery - 每个循环按数据属性选择所有项目,但也依赖于选择(选项)值

标签 javascript jquery loops attributes element

我正在建立一家电子商务商店,并且在我的实际产品页面上遇到了一个小障碍。根据选择后会添加到价格的任何产品选项集,我希望能够在添加这些选项后实时更新页面上的价格。我已经设法迭代每个带有“数据价格效果”属性的元素,但是,当涉及 select 元素时,我需要检查该项目是否被选择为一个选项,当然每个选项都有各自的价格变化属性,但该值只会更新到实际的select元素。

这是我到目前为止的代码:

function updatePrice(){
    $('[data-price-effect]').each(function( index ) {
        // do something
    });
}

进一步解释的基本 HTML 设置:

<form>
    <input type="text" name="foo" onchange="updatePrice();" data-price-effect="10.00" />

    <select name="bar" onchange="updatePrice();">
        <option selected value="Item1" data-price-effect="5.00">Item 1</option>
        <option selected value="Item2" data-price-effect="8.00">Item 2</option>
        <option selected value="Item3" data-price-effect="10.00">Item 3</option>
    </select>
</form>

我不知道如何从逻辑上做到这一点,即使有一些巨大而困惑的代码。有没有对 Javascript 更有经验的人指点一下?

最佳答案

您可以为该函数的所有表单元素设置一个监听器,而不是在每个元素上使用“updatePrice()”:

var EffectElements = $('form input[data-price-effect], form select');
EffectElements.on('change', function() {
    var PriceEffect = 0;
    EffectElements.each(function() { // Loop through elements
        if ($(this).is('select')) { //if this element is a select
            $(this).children().each(function() { //Loop through the child elements (options)
                if ($(this).is(':selected')) { //if this option is selected
                    PriceEffect += parseFloat($(this).attr('data-price-effect'));
                }
            });
        } else {
            PriceEffect += parseFloat($(this).attr('data-price-effect'));
        }
    });
});

然后,您可以使用 PriceEffect 变量更新网站上的价格。

最终是 IS函数做你需要的脏活~_o

Working Example

关于javascript - jQuery - 每个循环按数据属性选择所有项目,但也依赖于选择(选项)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28540568/

相关文章:

javascript - Jquery Flot 图表标签未显示

java - 试图拿到一手牌来显示西装符号

javascript访问for in循环的计数器

r - 在 R 中创建函数时循环将不起作用

javascript - 为什么我的大部分结果都是 nan

javascript - 当我使用 chrome 移动版时,div on.click 事件不起作用

javascript - 如果用户使用 jQuery 单击页面上除 2 个元素之外的任何位置,如何隐藏 div?

javascript - jQuery - 通过按钮增加和减少输入值

javascript - 三.js阴影转换问题

javascript - 如何覆盖具有 !important 属性的 padding-left