js實(shí)現(xiàn)類似支付密碼的功能并進(jìn)行校驗(yàn)

最近做項(xiàng)目,寫了類似支付密碼那樣的連續(xù)輸入框诅病,但是校驗(yàn)的時候遇到了問題,接下來就總結(jié)一下。

<!DOCTYPE html>
<html>
? <head>
??? <meta charset="utf-8">
??? <title>多個輸入框校驗(yàn)</title>
??? <style type="text/css">
????? *{
??????? margin: 0;
??????? padding: 0;
????? }
????? #inputBox{
??????? border: 1px solid #d9d9d9;
??????? width: 122px;
??????? font-size: 14px;
??????? overflow: hidden;
????? }
????? .num{
??????? border: none;
??????? width: 20px;
??????? padding: 10px;
??????? float: left;
??????? border-right: 1px solid #d9d9d9;
??????? text-align: center;
????? }
????? .num:last-child{
??????? border-right: none;
????? }
????? .error{
??????? color: red;
??????? display: none;
????? }
??? </style>
? </head>
? <body>
??? <div id="inputBox" class="box">
????? <input type="text" class="one num"/>
????? <input type="text" class="two num"/>
????? <input type="text" class="three num"/>
??? </div>
??? <p class="error">不能為空</p>
??? <input type="text" class="realInput"/>
? </body>
? <script src="js/jquery.js" charset="utf-8"></script>
? <script type="text/javascript">
??? function autoFocus (box) {
????? var $inputBox = $('#' + box);
????? var $inputs = $inputBox.find('input');
????? var inputLength = $inputBox.find('input').length;
????? for (var i = 0; i < inputLength; i ++) {
??????? t = $inputs[i];
??????? t.index = i;
??????? $(t).keyup(function (e) {
????????? var reg = /\d{1}/;
????????? var val = $(this).val();
????????? var prev = $(this)[0].index - 1;
????????? var next = $(this)[0].index + 1;
????????? if ((e.keyCode === 37 || e.keyCode === 8) && prev >= 0) {
??????????? $inputs[prev].focus();
????????? }
????????? if (e.keyCode === 39 && next <= inputLength -1) {
??????????? $inputs[next].focus();
????????? }
????????? if (reg.test(val)) {
??????????? if (next > inputLength - 1) {
????????????? return;
??????????? }
??????????? if ($($inputs[next]).val()) {
????????????? return;
??????????? }
??????????? $inputs[next].focus();
????????? }
??????? })
????? }
??? };
??? autoFocus('inputBox');
? </script>
</html>

以上這段代碼房揭,實(shí)現(xiàn)的是輸入框,輸入一位數(shù)字后晌端,下一個輸入框自動得焦捅暴,方向鍵和del鍵也可用。

大家一定發(fā)現(xiàn)咧纠,上面多出一個輸入框蓬痒,這個輸入框,先留著惧盹,后面大有用處乳幸。

那么接下來就是驗(yàn)證,我這里主要介紹兩個方法钧椰。第一個就是輸入框得焦之后粹断,給父元素添加標(biāo)記,然后輸入框失焦之后進(jìn)行校驗(yàn)嫡霞。這個校驗(yàn)是觸發(fā)輸入框得焦失焦之后才進(jìn)行瓶埋,這個標(biāo)記就是為了不在用戶首次進(jìn)入頁面之后就進(jìn)行校驗(yàn),而是輸入框觸發(fā)得焦失焦之后再校驗(yàn)诊沪。

// 父元素添加標(biāo)記

? ? $('.num').focus(function () {

? ? ? $('#inputBox').attr('data-dirty', 'true');

? ? });

? ? $('body').click(function (e) {

? ? ? if (!$(e.target).hasClass('box') && !$(e.target).hasClass('num')) {

? ? ? ? var dirty = $('#inputBox').attr('data-dirty');

? ? ? ? var one = $('.one').val();

? ? ? ? var two = $('.two').val();

? ? ? ? var three = $('.three').val();

? ? ? ? if (dirty) {

? ? ? ? ? if (!one || !two || !three) {

? ? ? ? ? ? $('.error').show();

? ? ? ? ? } else {

? ? ? ? ? ? $('.error').hide();

? ? ? ? ? }

? ? ? ? }

? ? ? }

? ? });

以上這段代碼养筒,是在點(diǎn)擊頁面其他地方進(jìn)行輸入框的校驗(yàn)。

下面介紹第二種方法端姚,這個方法就要用到頁面中多出的輸入框晕粪,把每個小輸入框的值都放在這個輸入框中,最后一個小輸入框失焦之后渐裸,大的輸入框失焦巫湘,此時對大輸入框校驗(yàn)。在真正的項(xiàng)目中昏鹃,這個大輸入框type值應(yīng)該設(shè)為hidden,這里為了展示就么有設(shè)為hidden尚氛。

// 隱藏的input框

??? $('.num:last').blur(function () {

? ? ? $('.realInput').blur();

? ? });

? ? var vals = '';

? ? $('.num').keyup(function () {

? ? ? var val = $(this).val();

? ? ? vals += val;

? ? ? $('.realInput').val(vals);

? ? });

? ? $('.realInput').blur(function () {

? ? ? var one = $('.one').val();

? ? ? var two = $('.two').val();

? ? ? var three = $('.three').val();

? ? ? if (!one || !two || !three) {

? ? ? ? $('.error').show();

? ? ? } else {

? ? ? ? $('.error').hide();

? ? ? }

? ? });

好了,兩種方法介紹到這里洞渤,如果還有其他的方法阅嘶,歡迎大家留言討論。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末载迄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缅帘,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溜畅,死亡現(xiàn)場離奇詭異,居然都是意外死亡极祸,警方通過查閱死者的電腦和手機(jī)慈格,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遥金,“玉大人浴捆,你說我怎么就攤上這事「逍担” “怎么了选泻?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長美莫。 經(jīng)常有香客問我页眯,道長,這世上最難降的妖魔是什么厢呵? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任窝撵,我火速辦了婚禮,結(jié)果婚禮上襟铭,老公的妹妹穿的比我還像新娘碌奉。我一直安慰自己,他們只是感情好寒砖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布赐劣。 她就那樣靜靜地躺著,像睡著了一般哩都。 火紅的嫁衣襯著肌膚如雪魁兼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天漠嵌,我揣著相機(jī)與錄音璃赡,去河邊找鬼。 笑死献雅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的塌计。 我是一名探鬼主播挺身,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锌仅!你這毒婦竟也來了章钾?” 一聲冷哼從身側(cè)響起墙贱,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贱傀,沒想到半個月后惨撇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡府寒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年魁衙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片株搔。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡剖淀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纤房,到底是詐尸還是另有隱情纵隔,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布炮姨,位于F島的核電站捌刮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舒岸。R本人自食惡果不足惜绅作,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吁津。 院中可真熱鬧棚蓄,春花似錦、人聲如沸碍脏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽典尾。三九已至役拴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钾埂,已是汗流浹背河闰。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褥紫,地道東北人姜性。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像髓考,于是被迫代替她去往敵國和親部念。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容