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 相关文章推荐
强制设为首页代码
Jun 19 Javascript
豆瓣网的jquery代码实例
Jun 15 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
Oct 30 Javascript
js中的异常处理try...catch使用介绍
Sep 21 Javascript
DOM节点删除函数removeChild()用法实例
Jan 12 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
JavaScript实现弹出广告功能
Mar 30 Javascript
Vue.js实现一个todo-list的上移下移删除功能
Jun 26 Javascript
js学使用setTimeout实现轮循动画
Jul 17 Javascript
Javascript中 toFixed四舍六入方法
Aug 21 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
Jan 10 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
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
Thinkphp中Create方法深入探究
2014/06/16 PHP
ThinkPHP模型详解
2015/07/27 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
详解django中自定义标签和过滤器
2017/07/03 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
Python小进度条显示代码
2019/03/05 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
自我评价范文点评
2013/12/04 职场文书
学习党课思想汇报
2013/12/29 职场文书
职业生涯规划书前言
2014/04/15 职场文书
个人工作表现评语
2014/04/30 职场文书
数学系毕业生求职信
2014/05/29 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js