0

我正在一个网上商店工作,客户可以通过下拉列表选择要购买的物品数量。每个项目都有一个点值,我通过 jQuery(onChange事件)计算他们的购买总额:

function showPoints(itemPointValue, ddlAmount){
    var customerPoints = parseInt($('p#points').html());
    currentPoints = customerPoints - (ddlAmount * itemPointValue);
    $('p#points').html(currentPoints);
}//showPoints     

这里唯一的问题是,如果他们将他们的数量从 5 更改为 4,那么另外 4 * 点值会从他们的“总点数”中扣除。他们的总分最终变得完全不准确,甚至可能低于 0。我想用它jquery.data来设置一个“oldValue”变量,但 IE 不支持这一点。有什么建议么?

4

4 回答 4

2

您可以如上所述将先前的值存储在自定义属性上,并且可以使用焦点事件来设置旧值,这行中的某些内容应该可以工作:

$('p#points').on('focus', function () {
    $(this).attr('old-value', $(this).val();
});
于 2012-11-23T10:47:52.063 回答
0

为什么不在任何下拉列表更改时重新计算总积分成本,并通过从 customerPoints 中减去新的总积分来重新计算 currentPoints?对我来说,这似乎是一个比加减值更清洁的解决方案

于 2012-11-23T09:05:10.463 回答
0

怎么样,在元素上创建自定义属性:

$('p#points').attr('old-value',5);

并像这样检索它:

$('p#points').attr('old-value');

于 2012-11-23T09:09:16.253 回答
0

我通过在下拉列表中使用两个事件解决了这个问题。onClick 使用 jquery.data 和 onChange 保存旧数据以检查旧值与新值。如果新值小于旧值,我会相应地调整总积分。

HTML:

<select name="dropdown onClick="saveOld(this.value, this.name)" onchange="showPoints(points, this.value,this.name)">

JS/jQuery

function showPoints(pointCategory, ddlAmount, name){
    old = jQuery.data(document.body,name);
    var Points = parseInt($('p#points').html());
    if(old > ddlAmount){
       diff =  old - ddlAmount;
       currentPoints = Points + (diff * pointCategory);
    }else{
       currentPoints = Points - (ddlAmount * pointCategory);
    }
    $('p#points').html(currentPoints);
}//showPoints

function saveOld(oldAmount, name){
    $(document.body).data(name,oldAmount);
}//saveOld

谢谢大家的答案!

于 2012-11-23T12:14:53.657 回答