JavaScript實(shí)現(xiàn)仿淘寶商品購(gòu)買(mǎi)數(shù)量的增減效果
近期在開(kāi)發(fā)一個(gè)地方O2O租書(shū)項(xiàng)目,使用ASP.NET MVC技術(shù),其中在圖書(shū)詳情頁(yè),用戶可以輸入借閱的數(shù)量,這里使用了js來(lái)控制數(shù)量的增減和校驗(yàn)。
1.數(shù)量一定是數(shù)字
2.點(diǎn)擊增減按鈕的時(shí)候要能自動(dòng)加1或減1
3.用戶輸入的內(nèi)容如果是非數(shù)字,則不能輸入(退格鍵除外)
4.用戶輸入的值最小為1
5.輸入框離開(kāi)焦點(diǎn)時(shí)要檢查取值范圍,確保輸入框中必須是范圍內(nèi)的數(shù)字
基本就是以上幾點(diǎn)
效果如下:

以下是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">加入借閱臺(tái)</a> <div class="clear"></div> </div>
首先看第一條:
輸入一定是數(shù)字
這很容易想到用keyup事件監(jiān)測(cè),用正則表達(dá)式替換非數(shù)字字符
$("#bookNum").keyup(function(){
var regex = /[^\d]*/g;
var numVal = $(this).val();
numVal = numVal.replace(regex,"");
numVal = parseInt(numVal)||;
numVal = numVal < ? : numVal;
$(this).val(numVal);
});
這樣就可以保證用戶輸入的一定是數(shù)字了,并且我們中間做了校驗(yàn),如果使用parseInt轉(zhuǎn)換為整數(shù)后值是NaN,就讓值為1 ,但是我們會(huì)發(fā)現(xiàn)一個(gè)現(xiàn)象,就是用戶如果想清空里面的值輸入20的時(shí)候,發(fā)現(xiàn)里面的值總是會(huì)變成1
這是不合理的,并且體驗(yàn)也不好,在輸入非數(shù)字的時(shí)候,會(huì)先顯示那個(gè)字符,然后被替換掉。
再觀察一下當(dāng)當(dāng)網(wǎng),京東這些網(wǎng)站,當(dāng)輸入非數(shù)字時(shí),輸入框根本就不會(huì)有任何動(dòng)靜,退格后 還能隨意輸入數(shù)字。經(jīng)研究發(fā)現(xiàn),他們使用了監(jiān)控鍵盤(pán)的方法,攔截輸入。
經(jīng)過(guò)改進(jìn)后:
$("#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;
}
})
這樣我們保證了在用戶使用取消回車(chē)(0),退格(8),左右箭頭(37 39)和數(shù)字時(shí) 正常輸入,其他按鍵就統(tǒng)統(tǒng)失效了。這樣就能保證輸入的內(nèi)容是數(shù)字了。
但是還有一個(gè)問(wèn)題,用戶使用退格鍵將內(nèi)容清空后,用戶沒(méi)有輸入的時(shí)候,值為空
這就要使用keyup和blur事件來(lái)彌補(bǔ)了
$("#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);
});
這樣就能保證用戶在輸入數(shù)字的時(shí)候的校驗(yàn)。
使用按鈕控制就更容易了:
//增加
$("#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);
});
好了,這樣就完美解決用戶輸入了。
當(dāng)然,這里僅僅說(shuō)明了js的控制,里面還可以加入其它控制,比如最大限制,庫(kù)存查詢,服務(wù)器校驗(yàn)等。這里就不再贅述。
- 用JQuery模仿淘寶的圖片放大鏡顯示效果
- 基于Jquery插件開(kāi)發(fā)之圖片放大鏡效果(仿淘寶)
- jquery仿京東導(dǎo)航/仿淘寶商城左側(cè)分類(lèi)導(dǎo)航下拉菜單效果
- 純jquery實(shí)現(xiàn)模仿淘寶購(gòu)物車(chē)結(jié)算
- Android實(shí)現(xiàn)的仿淘寶購(gòu)物車(chē)demo示例
- Jquery仿淘寶京東多條件篩選可自行結(jié)合ajax加載示例
- asp.net下使用jQuery.AutoComplete完成仿淘寶商品搜索自動(dòng)完成功能(改進(jìn)了鍵盤(pán)上下選擇體驗(yàn))
- jQuery實(shí)戰(zhàn)之仿淘寶商城左側(cè)導(dǎo)航效果
- Java實(shí)現(xiàn)仿淘寶滑動(dòng)驗(yàn)證碼研究代碼詳解
- 仿淘寶首頁(yè)分類(lèi)列表效果實(shí)現(xiàn)代碼
- Java仿淘寶首頁(yè)分類(lèi)列表功能的示例代碼
相關(guān)文章
JavaScript實(shí)戰(zhàn)之帶收放動(dòng)畫(huà)效果的導(dǎo)航菜單
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)戰(zhàn)之帶收放動(dòng)畫(huà)效果的導(dǎo)航菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
JavaScript高級(jí)程序設(shè)計(jì) 讀書(shū)筆記之九 本地對(duì)象Array
本地對(duì)象Array,數(shù)組等操作函數(shù)2012-02-02
JavaScript Class類(lèi)實(shí)例講解
ES6提供了更接近面向?qū)ο?注意:javascript本質(zhì)上是基于對(duì)象的語(yǔ)言)語(yǔ)言的寫(xiě)法,引入了Class(類(lèi))這個(gè)概念,作為對(duì)象的模板,下面這篇文章主要給大家介紹了關(guān)于JavaScript ES6中class定義類(lèi)的相關(guān)資料,需要的朋友可以參考下2022-11-11
js實(shí)現(xiàn)帶圓角的兩級(jí)導(dǎo)航菜單效果代碼
這篇文章主要介紹了js實(shí)現(xiàn)帶圓角的兩級(jí)導(dǎo)航菜單效果代碼,涉及javascript鼠標(biāo)事件及頁(yè)面元素樣式動(dòng)態(tài)變換技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08
js實(shí)現(xiàn)的八點(diǎn)拖動(dòng)修改div大小的代碼
八點(diǎn)改變div大小的實(shí)現(xiàn)代碼,代碼相對(duì)來(lái)說(shuō)并不多,需要的朋友可以參考下。2010-02-02
微信小程序?qū)崿F(xiàn)左滑動(dòng)刪除效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)左滑動(dòng)刪除效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
淺談JavaScript 數(shù)據(jù)屬性和訪問(wèn)器屬性
下面小編就為大家?guī)?lái)一篇淺談JavaScript 數(shù)據(jù)屬性和訪問(wèn)器屬性。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
js實(shí)現(xiàn)簡(jiǎn)易計(jì)數(shù)器功能
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)計(jì)數(shù)器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08

