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 相关文章推荐
学习YUI.Ext 第三天
Mar 10 Javascript
JavaScript获取多个数组的交集简单实例
Nov 11 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
Javascript this 关键字 详解
Oct 22 Javascript
JavaScript6 let 新语法优势介绍
Jul 15 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
jQuery中的select操作详解
Nov 29 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
Jan 04 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
Aug 15 Javascript
Javascript中将变量转换为字符串的三种方法
Sep 19 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
Mar 13 Javascript
解决layer.prompt无效的问题
Sep 24 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
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
js中split函数的使用方法说明
2013/12/26 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
2014年教师党员自我评议
2014/09/19 职场文书
安全生产月标语
2014/10/07 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
2014年政协工作总结
2014/12/09 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers