jquery text文本框商品数量增加或商品数量减少
发布时间:2015-12-15, 16:19:46 分类:HTML | 编辑 off 网址 | 辅助
正文 10957字数 83,575阅读
html<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.js"></script>
<script type="text/javascript" src="js/payfor.js"></script>
<style type="text/css">
*{margin:0;padding:0;}
a,img{border:0;text-decoration:none;}
body{font:12px/180% Arial, Helvetica, sans-serif, "新宋体";}
/* p_number */
.p_number{border:solid 1px #ddd;padding:10px 0 0 10px;width:480px;height:80px;margin:40px auto;}
.p_number .f_l{float:left;}
.p_number .add_chose{width:105px;}
.p_number .add_chose a{float:left;margin:5px 0 0 0;display:block;width:15px;height:15px;line-height:99em;overflow:hidden;background:url(images/reduce-add.gif) no-repeat;}
.p_number .add_chose a.reduce{background-position:0 0;}
.p_number .add_chose a.reduce:hover{background-position:0 -16px;}
.p_number .add_chose a.add{background-position:-16px 0;}
.p_number .add_chose a.add:hover{background-position:-16px -16px;}
.p_number .add_chose .text{float:left;margin:0 5px;display:inline;border:solid 1px #ccc;padding:4px 3px 4px 8px;width:40px;line-height:18px;font-size:14px;color:#990000;font-weight:800;}
.p_number .buy{line-height:2em;}
.p_number .buy .total-font{font-family:Arial;font-size:26px;}
.p_number .buy .jifen{margin-left:20px;color:#ACACAC;}
.p_number .buy .jifen b{margin:0 3px;}
</style>
<div class="p_number">
<div style="height:36px;font-size:16px;">商品单价:<strong id="price_item_1">¥350.00</strong></div>
<div class="f_l add_chose">
<a class="reduce" onClick="setAmount.reduce('#qty_item_1')" href="javascript:void(0)">-</a>
<input type="text" name="qty_item_1" value="1" id="qty_item_1" onKeyUp="setAmount.modify('#qty_item_1')" class="text" />
<a class="add" onClick="setAmount.add('#qty_item_1')" href="javascript:void(0)">+</a>
</div>
<div class="f_l buy">
总价:<span class="total-font" id="total_item_1">¥89.00</span>
<input type="hidden" name="total_price" id="total_price" value="" />
<span class="jifen">购买商品可获得:<b id="total_points">18</b>积分</span>
</div>
</div>
Run code
Cut to clipboard
payfor.js
/** jQuery Calculation Plug-in**/
(function($) {
var defaults = {reNumbers: /(-|-\$)?(\d+(,\d{3})*(\.\d{1,})?|\.\d{1,})/g, cleanseNumber: function (v) {
return v.replace(/[^0-9.\-]/g, "");
}, useFieldPlugin: (!!$.fn.getValue), onParseError: null, onParseClear: null};
$.Calculation = {version: "0.4.07",setDefaults: function(options) {
$.extend(defaults, options);
}};
$.fn.parseNumber = function(options) {
var aValues = [];
options = $.extend(options, defaults);
this.each(function () {
var $el = $(this),sMethod = ($el.is(":input") ? (defaults.useFieldPlugin ? "getValue" : "val") : "text"),v = $.trim($el[sMethod]()).match(defaults.reNumbers, "");
if (v == null) {
v = 0;
if (jQuery.isFunction(options.onParseError)) options.onParseError.apply($el, [sMethod]);
$.data($el[0], "calcParseError", true);
} else {
v = options.cleanseNumber.apply(this, [v[0]]);
if ($.data($el[0], "calcParseError") && jQuery.isFunction(options.onParseClear)) {
options.onParseClear.apply($el, [sMethod]);
$.data($el[0], "calcParseError", false);
}
}
aValues.push(parseFloat(v, 10));
});
return aValues;
};
$.fn.calc = function(expr, vars, cbFormat, cbDone) {
var $this = this, exprValue = "", precision = 0, $el, parsedVars = {}, tmp, sMethod, _, bIsError = false;
for (var k in vars) {
expr = expr.replace((new RegExp("(" + k + ")", "g")), "_.$1");
if (!!vars[k] && !!vars[k].jquery) {
parsedVars[k] = vars[k].parseNumber();
} else {
parsedVars[k] = vars[k];
}
}
this.each(function (i, el) {
var p, len;
$el = $(this);
sMethod = ($el.is(":input") ? (defaults.useFieldPlugin ? "setValue" : "val") : "text");
_ = {};
for (var k in parsedVars) {
if (typeof parsedVars[k] == "number") {
_[k] = parsedVars[k];
} else if (typeof parsedVars[k] == "string") {
_[k] = parseFloat(parsedVars[k], 10);
} else if (!!parsedVars[k] && (parsedVars[k] instanceof Array)) {
tmp = (parsedVars[k].length == $this.length) ? i : 0;
_[k] = parsedVars[k][tmp];
}
if (isNaN(_[k])) _[k] = 0;
p = _[k].toString().match(/\.\d+$/gi);
len = (p) ? p[0].length - 1 : 0;
if (len > precision) precision = len;
}
try {
exprValue = eval(expr);
if (precision) exprValue = Number(exprValue.toFixed(Math.max(precision, 4)));
if (jQuery.isFunction(cbFormat)) {
var tmp = cbFormat.apply(this, [exprValue]);
if (!!tmp) exprValue = tmp;
}
} catch(e) {
exprValue = e;
bIsError = true;
}
$el[sMethod](exprValue.toString());
});
if (jQuery.isFunction(cbDone)) cbDone.apply(this, [this]);
return this;
};
$.each(["sum", "avg", "min", "max"], function (i, method) {
$.fn[method] = function (bind, selector) {
if (arguments.length == 0)return math[method](this.parseNumber());
var bSelOpt = selector && (selector.constructor == Object) && !(selector instanceof jQuery);
var opt = bind && bind.constructor == Object ? bind : {bind: bind || "keyup", selector: (!bSelOpt) ? selector : null, oncalc: null};
if (bSelOpt) opt = jQuery.extend(opt, selector);
if (!!opt.selector) opt.selector = $(opt.selector);
var self = this, sMethod, doCalc = function () {
var value = math[method](self.parseNumber(opt));
if (!!opt.selector) {
sMethod = (opt.selector.is(":input") ? (defaults.useFieldPlugin ? "setValue" : "val") : "text");
opt.selector[sMethod](value.toString());
}
if (jQuery.isFunction(opt.oncalc)) opt.oncalc.apply(self, [value, opt]);
};
doCalc();
return self.bind(opt.bind, doCalc);
}
});
var math = {sum: function (a) {
var total = 0, precision = 0;
$.each(a, function (i, v) {
var p = v.toString().match(/\.\d+$/gi), len = (p) ? p[0].length - 1 : 0;
if (len > precision) precision = len;
total += v;
});
if (precision) total = Number(total.toFixed(precision));
return total;
},avg: function (a) {
return math.sum(a) / a.length;
},min: function (a) {
return Math.min.apply(Math, a);
},max: function (a) {
return Math.max.apply(Math, a);
}};
})(jQuery);
/** ------------- choose -------------------- **/
/* reduce_add */
var setAmount = {
min:1,
max:999,
reg:function(x) {
return new RegExp("^[1-9]\\d*$").test(x);
},
amount:function(obj, mode) {
var x = $(obj).val();
if (this.reg(x)) {
if (mode) {
x++;
} else {
x--;
}
} else {
alert("请输入正确的数量!");
$(obj).val(1);
$(obj).focus();
}
return x;
},
reduce:function(obj) {
var x = this.amount(obj, false);
if (x >= this.min) {
$(obj).val(x);
recalc();
} else {
alert("商品数量最少为" + this.min);
$(obj).val(1);
$(obj).focus();
}
},
add:function(obj) {
var x = this.amount(obj, true);
if (x <= this.max) {
$(obj).val(x);
recalc();
} else {
alert("商品数量最多为" + this.max);
$(obj).val(999);
$(obj).focus();
}
},
modify:function(obj) {
var x = $(obj).val();
if (x < this.min || x > this.max || !this.reg(x)) {
alert("请输入正确的数量!");
$(obj).val(1);
$(obj).focus();
}
}
}
function BuyUrl(wid) {
var pcounts = $("input[id^=qty_item_]").val();
var patrn = /^[0-9]{1,4}$/;
if (!patrn.exec(pcounts)) {
pcounts = 1;
}
else {
if (pcounts <= 0)
pcounts = 1;
if (pcounts >= 1000)
pcounts = 999;
}
}
;
/** total_item **/
$(document).ready(function () {
$("input[name^=qty_item_]").bind("keyup", recalc);
recalc();
});
function recalc() {
$("input[id^=total_item]").val()
//产品价格统计
$("[id^=total_item]").calc(
"qty * price",
{
qty: $("input[name^=qty_item_]"),
price: $("[id^=price_item_]")
},
function (s) {
return "¥" + s.toFixed(2);
},
function ($this) {
var sum = $this.sum();
$("[id^=total_item]").text(
"¥" + sum.toFixed(2)
);
$("#total_price").val($("[id^=total_item]").text());
}
);
//产品积分统计
$("[id^=total_points]").calc(
"qty * price",
{
qty: $("input[name^=qty_item_]"),
price: $("[id^=price_item_]")
},
function (s) {
return "" + s.toFixed(0);
}
);
};
Run code
Cut to clipboard
(支付宝)给作者钱财以资鼓励 (微信)→
暂无评论 »