解決Js先觸發(fā)失去焦點(diǎn)事件再執(zhí)行點(diǎn)擊事件的問題
最近在做公司的某個從項(xiàng)目,基本設(shè)計和淘寶登陸頁類似:
1)文本框內(nèi)容為空是,文本框右側(cè)無清除按鈕,當(dāng)有內(nèi)容時立即顯示清除按鈕;
2)當(dāng)文本框失去焦點(diǎn)時,清除按鈕消失,獲取焦點(diǎn)時若文本框內(nèi)有內(nèi)容,則顯示清除按鈕,否則不顯示;
3)文本框再有內(nèi)容且獲取焦點(diǎn)的情況下,點(diǎn)擊清除按鈕,文本框內(nèi)容置空,且清除按鈕消失。
隨后想了想,感覺是個很簡單的需求,只要結(jié)合使用keyup和blur以及click時間就可以解決了,然而,結(jié)果卻不是我想要的,代碼如下:
html代碼:
<div class="input-group"> <input type="text" id="mobile" class="form-control" placeholder="請輸入手機(jī)號" autocomplete="off" /> <div class="input-group-addon icon-clear"></div> </div>
js代碼:
//綁定監(jiān)聽手機(jī)號文本框內(nèi)容按鈕事件 $('#mobile').keyup(function() { var clearBtn = $(this).parent().find('.icon-clear'); if($(this).val() == '') { clearBtn.hide(); } else { clearBtn.css('display', 'table-cell'); } }); //手機(jī)號輸入框失去焦點(diǎn),去除清除按鈕;獲取焦點(diǎn)時,若有值則顯示清除按鈕 $('#mobile').blur(function() { $('#mobile').parent().find('.icon-clear').hide(); }).focus(function(){ if($(this).val() != ''){ $(this).parent().find('.icon-clear').css('display', 'table-cell'); } }); //清除文本框內(nèi)容事件 $('.icon-clear').click(function() { $(this).parent().find('input').val(''); $(this).hide(); });
這樣看著像是什么問題都沒有的樣子,其實(shí)不然,運(yùn)行之后發(fā)現(xiàn),在文本框中輸入內(nèi)容后文本框獲取焦點(diǎn),這個時候我想要去點(diǎn)擊清除按鈕來清除剛才我寫的東西,發(fā)現(xiàn),文本框內(nèi)容沒有置空,清除按鈕卻先消失了,很納悶啊。
后來經(jīng)查閱發(fā)現(xiàn),是先執(zhí)行的失去焦點(diǎn)事件,那么如何去解決呢?
而后,我在失去焦點(diǎn)事件中對其中的方法進(jìn)行了延遲處理,如下所示:
//驗(yàn)證碼輸入框失去焦點(diǎn),去除清除按鈕;獲取焦點(diǎn)時,若有值則顯示清除按鈕 $('#auth_code').blur(function() { setTimeout(function() { //進(jìn)行延時處理,時間單位為千分之一秒 $('#auth_code').parent().find('.icon-clear').hide(); }, 100) }).focus(function(){ if($(this).val() != ''){ $(this).parent().find('.icon-clear').css('display', 'table-cell'); } });
如此操作后就可以完美解決了,目前未發(fā)現(xiàn)任何副作用。
以上這篇解決Js先觸發(fā)失去焦點(diǎn)事件再執(zhí)行點(diǎn)擊事件的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- javascript觸發(fā)模擬鼠標(biāo)點(diǎn)擊事件
- 利用chrome瀏覽器進(jìn)行js調(diào)試并找出元素綁定的點(diǎn)擊事件詳解
- JS鼠標(biāo)3次點(diǎn)擊事件實(shí)現(xiàn)代碼及擴(kuò)展思路
- JavaScript實(shí)現(xiàn)父子dom同時綁定兩個點(diǎn)擊事件,一個用捕獲,一個用冒泡時執(zhí)行順序的方法
- vuejs響應(yīng)用戶事件(如點(diǎn)擊事件)
- JavaScript給每一個li節(jié)點(diǎn)綁定點(diǎn)擊事件的實(shí)現(xiàn)方法
- js中class的點(diǎn)擊事件沒有效果的解決方法
- JS通用方法觸發(fā)點(diǎn)擊事件代碼實(shí)例
相關(guān)文章
js實(shí)現(xiàn)頁面轉(zhuǎn)發(fā)功能示例代碼
本文為大家介紹的是使用js實(shí)現(xiàn)頁面轉(zhuǎn)發(fā),具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下,希望對大家有所幫助2013-08-08微信小程序?qū)崿F(xiàn)橫向滾動導(dǎo)航欄效果
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)橫向滾動導(dǎo)航欄效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12javascript下利用數(shù)組緩存正則表達(dá)式的實(shí)現(xiàn)方法
利用組存大法要提高我們程序的性能,讓我們的正則表達(dá)式的創(chuàng)建于執(zhí)行更有效率。2009-12-12js判斷輸入字符串是否為空、空格、null的方法總結(jié)
下面小編就為大家?guī)硪黄猨s判斷輸入字符串是否為空、空格、null的方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06iframe高度自適應(yīng)及隱藏滾動條的實(shí)例詳解
這篇文章主要介紹了iframe高度自適應(yīng)及隱藏滾動條的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09javascript 四則運(yùn)算精度修正函數(shù)代碼
JS預(yù)算精度問題確實(shí)很麻煩,這個能解決一些問題,雖然有bug.2010-05-05