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 相关文章推荐
jquery实现点击TreeView文本父节点展开/折叠子节点
Jan 10 Javascript
jQuery滚动加载图片效果的实现
Mar 06 Javascript
javascript确认框的三种使用方法
Dec 17 Javascript
Javascript基础教程之数据类型 (字符串 String)
Jan 18 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
Jul 27 Javascript
jquery实现的横向二级导航效果代码
Aug 26 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
Apr 26 Javascript
javascript深拷贝的原理与实现方法分析
Apr 10 Javascript
vue-cli如何引入bootstrap工具的方法
Oct 19 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
Jan 18 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
Aug 22 Javascript
原生js实现无缝轮播图
Jan 11 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
php实现求相对时间函数
2015/06/15 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
Javascript Select操作大集合
2009/05/26 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
angular2使用简单介绍
2016/03/01 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
Sanic框架Cookies操作示例
2018/07/17 Python
Python中安装easy_install的方法
2018/11/18 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
django自定义模板标签过程解析
2019/12/14 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
如何在Python对Excel进行读取
2020/06/04 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
调解协议书
2014/04/16 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
干部作风建设工作总结
2014/10/29 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
尝试使用Python爬取城市租房信息
2022/04/12 Python