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 相关文章推荐
javawscript 三级菜单的实现原理
Jul 01 Javascript
锋利的jQuery 第三章章节总结的例子
Mar 23 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 Javascript
使用jQuery插件创建常规模态窗口登陆效果
Aug 23 Javascript
关于JavaScript命名空间的一些心得
Jun 07 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
Jun 03 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
微信分享调用jssdk实例
Jun 08 Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 Javascript
vue实现短信验证码输入框
Apr 17 Javascript
Js跳出两级循环方法代码实例
Sep 22 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 expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
容易被忽略的JS脚本特性
2011/09/13 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
Angular 作用域scope的具体使用
2017/12/11 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
python操作文件的参数整理
2019/06/11 Python
Python数学形态学实例分析
2019/09/06 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
Python Json数据文件操作原理解析
2020/05/09 Python
用Python实现职工信息管理系统
2020/12/30 Python
应届生如何写自荐信
2014/01/05 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
社区文艺活动方案
2014/08/19 职场文书
安全月宣传标语
2014/10/07 职场文书
Mysql文件存储图文详解
2021/06/01 MySQL