【问题标题】:Jquery input radio field add percentageJquery 输入单选字段添加百分比
【发布时间】:2014-02-19 18:12:00
【问题描述】:

选择广播按钮时,我需要能够为总价添加百分比。该代码当前有效,但仅向单选按钮添加了一个值。我需要它,但还需要使用 addOns 和 + 一个百分比来计算总价格。

有谁知道我可以如何使用 Jquery 来改变它?

提前致谢。

Jsfiddle:http://jsfiddle.net/4bitlabs/mGLfk/5/

HTML:

<div class="price">Estimate Price $<label for="amount1" class="total">0</label></div>

<p class="itemdesc1">How many "Linear Feet" of boards do you have?</p>
<input id="amount1" class="amount" data-for="amount1" />

<div class="addon"><input id="amount2" type="checkbox" value="10.00" class="radio addOn" data-for="amount1" />Add Red $10.00</div>

<div class="addon"><input id="amount3" type="checkbox" value="20.00" class="radio addOn" data-for="amount1" />Add Blue + 20%</div>

jquery:

$(function () {
    $('.amount').keypress(function () {
        changeAmount($(this));
    });

    $('.addOn').change(function () {
        var $original = $('#' + $(this).data('for'));
        changeAmount($original);
    });
});

function changeAmount($element) {
    var amount = 0;
    amount = parseFloat($element.val()) * 20;

    if (isNaN(amount)) {
        amount = 0;
    }

    var id = $element.attr('id');

    $('.radio:checked[data-for="' + id + '"]').each(function () {
        amount += parseFloat($(this).val());
    });

    $('label[for=' + id + ']').text(amount.toFixed(0))
}

【问题讨论】:

  • 你遇到了什么错误??
  • 您只是希望输出旁边有一个“%”符号吗?
  • 没有错误,但是如果您查看第二个复选框,您会看到我想添加总价的 20%,例如:Estiamte 价格是 200 美元,oncheck 增加了 20 美元,这是它的 20% -新估价为 220 美元
  • 这应该是两个独立的函数。一个添加基本金额,一个添加百分比。
  • 看这个小提琴:jsfiddle.net/4bitlabs/mGLfk/7

标签: javascript jquery html input calculator


【解决方案1】:

好的,我会重写我从你的问题中理解的内容,如果我错了,请纠正我......

您有复选框,并且您有一个输入框,您可以在其中写下您想购买的许多物品。然后,您想知道所购买商品的最终价格,根据单击的 CHECKBOX 应用一些注意事项。

好吧,也就是说,我首先要确保您总是在发生任何变化时触发“添加功能”(例如,您更改了输入的数量,或者您单击了一个复选框)。您几乎做到了,但是您传递了一个参数,我认为这没有必要。当您随时触发计算时,您将始终得到正确的结果。

另外,您需要区分“添加复选框”(为每件商品添加价格)和“百分比复选框”(在价格中添加百分比),以了解您必须添加的价值。只需在您的复选框中添加分类以区分它们。我将添加一个小提琴:

变化:

复选框中的类别,要知道我们想对其中的任何一个做什么,请注意 addpercentage 类别:

<div class="addon"><input id="amount2" type="checkbox" value="10.00" class="radio addOn add" data-for="amount1" />Add Red $10.00</div>

<div class="addon"><input id="amount3" type="checkbox" value="20.00" class="radio addOn percentage" data-for="amount1" />Add Blue + 20%</div>

您的函数添加必须在您更改任何内容时调用,以让您知道更改了什么,并在更改值时将价格设置为零(可选)。

$('.amount').keydown(function () {
    $('.price label').text('0');
});

$('.amount').keyup(function () {
    changeAmount();
});

$('input:checkbox').change(function () {
    changeAmount();
});

最后,根据点击的复选框的类别,不同的计算:

function changeAmount() {
    var $amount = 0;

    $amount = parseFloat( $('.amount').val() ) * 20;
    if (isNaN($amount)) {
        $amount = 0;
    }

    var $add = 0;
    $('.add:checked').each(function () {
        $add += parseFloat( $(this).val() );
    });

    // Calculate percentage of the Base product
    if ( $('.percentage').is(":checked") ) {
        $amount = $amount * (1 + $('.percentage').val()/100 );
    }

    var $total = parseFloat( $amount + $add );

    $('.price label').text( $total.toFixed(0) )
}

小提琴:http://jsfiddle.net/mGLfk/11/

希望它喜欢你!呵呵

【讨论】:

  • 太棒了!谢谢,就是这样。
  • 如何从复选框更改为单选?当我将“复选框”更改为“收音机”时,没有任何反应。我将 jquery :checked 更改为 $radio:checked,但没有运气。谢谢
  • 在哪里?我认为您将“radio”类与“radio”标签html混淆了。在 jquery 中,您使用 $('element.class') 选择带有类的元素,并使用伪选择器 $('element:elementType') 选择 HTML 元素的特定子集。 $('input:checkbox') 用于选择复选框,$('.radio') 将选择 ANY ELEMENT WITH CLASS RADIO
  • 再次正确!伙计,这是漫长的一天。这是元素类型,将 $('input:checkbox') 更改为 $('.radio') 并且它起作用了。很抱歉打扰了。
  • 我不想问这个问题,但是除了为按钮重复百分比 2、3 等代码之外,有没有一种简单的方法可以使用(这个)来表示百分比,我有很多东西要说在这个小提琴上看到 jquery:jsfiddle.net/EG9M4
【解决方案2】:

我想我明白了http://jsfiddle.net/mGLfk/10/ 首先,使用 keyup 而不是 keypress。我为百分比和总和添加了两个单独的类。

function changeAmount($element) {
    var amount = 0;
    amount = parseFloat($element.val()) * 20;
    if (isNaN(amount)) {
        amount = 0;
    }
    var id = $element.attr('id');
    $('.sum.radio:checked[data-for="' + id + '"]').each(function () {
        amount += parseFloat($(this).val());
    });
    var percentage=100;
    $('.percent.radio:checked[data-for="' + id + '"]').each(function () {
        percentage += parseFloat($(this).val());
    });
    amount*=(percentage/100);
    $('label[for=' + id + ']').text(amount.toFixed(0))
}

【讨论】:

  • 是的,但是第一个复选框不起作用,如果我有 2 个复选框,#1 是 10%,#2 是 20%,如果我同时单击两者,则总数会增加 30%。那非常接近。我也会努力的。谢谢
  • 感谢@Skriptotajs,感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多