我正在网上商店工作,客户可以通过下拉列表选择要购买的商品数量。每个项目都有一个分值,我通过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不支持这一点。有什么建议吗?
答案 0 :(得分:2)
您可以将上一个值存储在自定义属性上,如上所述,您可以使用焦点事件来设置旧值,其中的某些内容应该有效:
$('p#points').on('focus', function () {
$(this).attr('old-value', $(this).val();
});
答案 1 :(得分:0)
为什么不在任何下拉列表更改时重新计算总点数成本,并通过从customerPoints中减去新总计来重新计算currentPoints?对我来说,这似乎是一个比添加和减去值更清晰的解决方案
答案 2 :(得分:0)
如何在元素上创建自定义属性:
$('p#points').attr('old-value',5);
并像这样检索它:
$('p#points').attr('old-value');
答案 3 :(得分: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
谢谢大家的答案!