JavaScript实现仿淘宝商品购买数量的增减效果


Posted in Javascript onJanuary 22, 2016

近期在开发一个地方O2O租书项目,使用ASP.NET MVC技术,其中在图书详情页,用户可以输入借阅的数量,这里使用了js来控制数量的增减和校验。

1.数量一定是数字

2.点击增减按钮的时候要能自动加1或减1

3.用户输入的内容如果是非数字,则不能输入(退格键除外)

4.用户输入的值最小为1

5.输入框离开焦点时要检查取值范围,确保输入框中必须是范围内的数字

基本就是以上几点

效果如下:

JavaScript实现仿淘宝商品购买数量的增减效果

以下是Html代码

<div class="bookNum">
<a id="sub" href="javascript:void(0);">-</a>
<input type="text" value="1" id="bookNum">
<a id="add" href="javascript:void(0);">+</a>
<a href="javascript:void(0);" id="addCart">加入借阅台</a>
<div class="clear"></div>
</div>

首先看第一条:

输入一定是数字

这很容易想到用keyup事件监测,用正则表达式替换非数字字符

$("#bookNum").keyup(function(){
var regex = /[^\d]*/g;
var numVal = $(this).val();
numVal = numVal.replace(regex,"");
numVal = parseInt(numVal)||;
numVal = numVal < ? : numVal;
$(this).val(numVal);
});

这样就可以保证用户输入的一定是数字了,并且我们中间做了校验,如果使用parseInt转换为整数后值是NaN,就让值为1 ,但是我们会发现一个现象,就是用户如果想清空里面的值输入20的时候,发现里面的值总是会变成1

这是不合理的,并且体验也不好,在输入非数字的时候,会先显示那个字符,然后被替换掉。

再观察一下当当网,京东这些网站,当输入非数字时,输入框根本就不会有任何动静,退格后 还能随意输入数字。经研究发现,他们使用了监控键盘的方法,拦截输入。

经过改进后:

$("#bookNum").keypress(function(b) {
var keyCode = b.keyCode ? b.keyCode : b.charCode;
if (keyCode != 0 && (keyCode < 48 || keyCode > 57) && keyCode != 8 && keyCode != 37 && keyCode != 39) {
return false;
} else {
return true;
}
})

这样我们保证了在用户使用取消回车(0),退格(8),左右箭头(37 39)和数字时 正常输入,其他按键就统统失效了。这样就能保证输入的内容是数字了。

但是还有一个问题,用户使用退格键将内容清空后,用户没有输入的时候,值为空

这就要使用keyup和blur事件来弥补了

$("#bookNum").keypress(function(b) {
var keyCode = b.keyCode ? b.keyCode : b.charCode;
if (keyCode != 0 && (keyCode < 48 || keyCode > 57) && keyCode != 8 && keyCode != 37 && keyCode != 39) {
return false;
} else {
return true;
}
}).keyup(function(e) {
var keyCode = e.keyCode ? e.keyCode : e.charCode;
console.log(keyCode);
if (keyCode != 8) {
var numVal = parseInt($("#bookNum").val()) || 0;
numVal = numVal < 1 ? 1 : numVal;
$("#bookNum").val(numVal);
}
}).blur(function() {
var numVal = parseInt($("#bookNum").val()) || 0;
numVal = numVal < 1 ? 1 : numVal;
$("#bookNum").val(numVal);
});

这样就能保证用户在输入数字的时候的校验。

使用按钮控制就更容易了:

//增加
$("#add").click(function() {
var num = parseInt($("#bookNum").val()) || 0;
$("#bookNum").val(num + 1);
});
//减去
$("#sub").click(function() {
var num = parseInt($("#bookNum").val()) || 0;
num = num - 1;
num = num < 1 ? 1 : num;
$("#bookNum").val(num);
});

好了,这样就完美解决用户输入了。

当然,这里仅仅说明了js的控制,里面还可以加入其它控制,比如最大限制,库存查询,服务器校验等。这里就不再赘述。

Javascript 相关文章推荐
Ajax,UTF-8还是GB2312 eval 还是execScript
Nov 13 Javascript
10个实用的脚本代码工具
May 04 Javascript
JQuery判断HTML元素是否存在的两种解决方法
Dec 26 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
Apr 25 Javascript
javascript将数字转换整数金额大写的方法
Jan 27 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
May 30 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
Sep 14 Javascript
React中的render何时执行过程
Apr 13 Javascript
ant-design-vue按需加载的坑的解决
May 14 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 #Javascript
JavaScript学习笔记整理之引用类型
Jan 22 #Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 #Javascript
基于JS实现新闻列表无缝向上滚动实例代码
Jan 22 #Javascript
jQuery validate插件实现ajax验证重复的2种方法
Jan 22 #Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
Jan 22 #Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
Jan 22 #Javascript
You might like
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
JS按字节截取字符长度实例
2013/11/20 Javascript
javascript控制台详解
2015/06/25 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python3 爬取图片的实例代码
2018/11/06 Python
python numpy 按行归一化的实例
2019/01/21 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
优秀毕业生事迹材料
2014/02/12 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
家长会主持词开场白
2014/03/18 职场文书
2014年党支部学习材料
2014/05/19 职场文书
新学期标语
2014/06/30 职场文书
文秘应届生求职信
2014/07/05 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
小学主题班会教案
2015/08/17 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
Golang 字符串的常见操作
2022/04/19 Golang
MySQL主从切换的超详细步骤
2022/06/28 MySQL