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 相关文章推荐
把html页面的部分内容保存成新的html文件的jquery代码
Nov 12 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
Mar 03 Javascript
基于jquery实现状态限定编辑的代码
Feb 11 Javascript
js中的preventDefault与stopPropagation详解
Jan 29 Javascript
JS实现简洁、全兼容的拖动层实例
May 13 Javascript
jQuery满意度星级评价插件特效代码分享
Aug 19 Javascript
vue2组件实现懒加载浅析
Mar 29 Javascript
ionic2打包android时gradle无法下载的解决方法
Apr 05 Javascript
简单实现js上传文件功能
Aug 21 Javascript
浅谈react.js中实现tab吸顶效果的问题
Sep 06 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
Sep 30 Javascript
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
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
js日期时间补零的小例子
2013/03/05 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
Python开发常用的一些开源Package分享
2015/02/14 Python
Python导入oracle数据的方法
2015/07/10 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
基于python绘制科赫雪花
2018/06/22 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
24个canvas基础知识小结
2014/12/17 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
北京英文导游词
2015/02/12 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
Mysql忘记密码解决方法
2022/02/12 MySQL