blur事件與click事件沖突的解決辦法

在處理表單登錄的過程中裸扶,遇到了一個(gè)問題左驾,當(dāng)我們在輸入框輸入內(nèi)容輸入框獲取到焦點(diǎn)時(shí)允坚,輸入框后面會出現(xiàn)一個(gè)圖標(biāo)刪除已輸入的內(nèi)容匹层,因此刪除圖標(biāo)會綁定一個(gè)click事件隙笆,但是當(dāng)我們點(diǎn)擊圖標(biāo)的時(shí)候,也觸發(fā)了input的blur事件,blur事件會讓input失去焦點(diǎn)時(shí)隱藏刪除的圖標(biāo)撑柔,并且blur事件先于圖標(biāo)的click事件執(zhí)行煤率,因此這時(shí)候點(diǎn)擊圖標(biāo)并不會刪除輸入框已輸入的內(nèi)容,而是圖標(biāo)消失了乏冀,那么這個(gè)結(jié)果就不是我們想要的蝶糯,那怎么解決這個(gè)問題呢?


我們先看下blur和click事件

blur事件:當(dāng)元素失去焦點(diǎn)時(shí)觸發(fā)blur事件辆沦;早前昼捍,blur 事件僅發(fā)生于表單元素上。在新瀏覽器中肢扯,該事件可用于任何元素妒茬,blur和focus事件不會冒泡,其他表單事件都可以蔚晨。

click事件:當(dāng)點(diǎn)擊元素時(shí)觸發(fā)click事件乍钻;所有元素都有此事件,會產(chǎn)生冒泡铭腕。

問題產(chǎn)生的原因:
這是因?yàn)閎lur事件比click事件先觸發(fā)银择,而javascript為單線程,同一時(shí)間只能執(zhí)行處理一個(gè)事件累舷,所以當(dāng)blur執(zhí)行時(shí)浩考,導(dǎo)致其后續(xù)click事件并不會執(zhí)行

解決方法一:如果讓click事件比blur事件先觸發(fā)就沒有問題了,因此可以給blur事件加定時(shí)器延遲觸發(fā)
/*刪除圖標(biāo)的點(diǎn)擊事件*/
 $(".delete-icon").on("click",function () {
    $(this).prev("input").val("").focus();
 });
 /*輸入框失去焦點(diǎn)的blur事件*/
 $("input[name='username'],input[name='password']").on("blur",function () {
    var $this = $(this);
    setTimeout(function(){
       $this.parent().removeClass("active");
       $this.next(".delete-icon").hide();
   },250)
});

缺點(diǎn):設(shè)置多久的延時(shí)是一個(gè)難以兩全的問題被盈,時(shí)間太短不能保證click事件的100%觸發(fā)析孽,時(shí)間太長則會造成卡頓的感覺,影響用戶體驗(yàn)

解決方法二:將click事件改為mousedown事件只怎,mousedown事件是優(yōu)先于blur事件執(zhí)行
            /*刪除圖標(biāo)的點(diǎn)擊事件*/
            $(".delete-icon").on("mousedown",function () {
                $(this).prev("input").val("").focus();
            });
           /*輸入框失去焦點(diǎn)的blur事件*/
            $("input[name='username'],input[name='password']").on("blur",function () {
                var $this = $(this);
                $this.parent().removeClass("active");
                $this.next(".delete-icon").hide();
            });

缺點(diǎn):鼠標(biāo)按下便觸發(fā)了事件袜瞬,不收起邓尤、長按也會觸發(fā)盾沫,可能造成用戶體驗(yàn)不好

解決方法三:給圖標(biāo)再添加一個(gè)mousedown事件赴精,在其中執(zhí)行event.preventDefault()阻止瀏覽器默認(rèn)事件,這樣點(diǎn)擊按鈕時(shí)輸入框就不會失去焦點(diǎn)了
           /*阻止瀏覽器默認(rèn)事件*/
            $(".delete-icon").on("mousedown",function(e) {
                e.preventDefault();
            })
            /*刪除圖標(biāo)的點(diǎn)擊事件*/
            $(".delete-icon").on("click",function () {
                $(this).prev("input").val("").focus();
            });
           /*輸入框失去焦點(diǎn)的blur事件*/
            $("input[name='username'],input[name='password']").on("blur",function () {
                var $this = $(this);
                $this.parent().removeClass("active");
                $this.next(".delete-icon").hide();
            });
解決方法四:動態(tài)綁定blur事件莲蜘,當(dāng)鼠標(biāo)進(jìn)入input框父級元素時(shí)帘营,移除input綁定事件blur芬迄,當(dāng)鼠標(biāo)移出輸入框父級元素時(shí)禀梳,給input綁定blur事件
            /*動態(tài)綁定blur事件*/
            $(".login-con li").mouseenter(function(){
                $(this).find("input").unbind("blur");
            });
            $(".login-con li").mouseleave(function(event){
                $(this).find("input").bind("blur");
            });
           /*刪除圖標(biāo)的點(diǎn)擊事件*/
            $(".delete-icon").on("click",function () {
                $(this).prev("input").val("").focus();
            });
           /*輸入框失去焦點(diǎn)的blur事件*/
            $("input[name='username'],input[name='password']").on("blur",function () {
                var $this = $(this);
                $this.parent().removeClass("active");
                $this.next(".delete-icon").hide();
            });

推薦使用方法三算途、方法四
原文作者技術(shù)博客:http://www.reibang.com/u/ac4daaeecdfe
95后前端妹子一枚,愛閱讀扫外,愛交友廓脆,將工作中遇到的問題記錄在這里,希望給每一個(gè)看到的你能帶來一點(diǎn)幫助狞贱。
歡迎留言交流

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞎嬉,一起剝皮案震驚了整個(gè)濱河市厚柳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌别垮,老刑警劉巖碳想,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胧奔,死亡現(xiàn)場離奇詭異龙填,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扇商,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門案铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來控汉,“玉大人,你說我怎么就攤上這事暇番。” “怎么了壁酬?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舆乔。 經(jīng)常有香客問我岳服,道長希俩,這世上最難降的妖魔是什么吊宋? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任颜武,我火速辦了婚禮璃搜,結(jié)果婚禮上鳞上,老公的妹妹穿的比我還像新娘这吻。我一直安慰自己,他們只是感情好唾糯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布鬼贱。 她就那樣靜靜地躺著,像睡著了一般舟误。 火紅的嫁衣襯著肌膚如雪同云。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天炸站,我揣著相機(jī)與錄音旱易,去河邊找鬼。 笑死腿堤,一個(gè)胖子當(dāng)著我的面吹牛阀坏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笆檀,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忌堂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酗洒?” 一聲冷哼從身側(cè)響起士修,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樱衷,沒想到半個(gè)月后棋嘲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矩桂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年沸移,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侄榴。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雹锣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出癞蚕,到底是詐尸還是另有隱情笆制,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布涣达,位于F島的核電站,受9級特大地震影響证薇,放射性物質(zhì)發(fā)生泄漏度苔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一浑度、第九天 我趴在偏房一處隱蔽的房頂上張望寇窑。 院中可真熱鬧,春花似錦箩张、人聲如沸甩骏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饮笛。三九已至咨察,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間福青,已是汗流浹背摄狱。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留无午,地道東北人媒役。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像宪迟,于是被迫代替她去往敵國和親酣衷。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的。 ??事件箕憾,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,490評論 1 11
  • 本篇博客源地址 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件ele.click()ele.click(ha...
    ZombieBrandg閱讀 674評論 0 1
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,605評論 2 10
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,336評論 0 8
  • 第1章 鼠標(biāo)事件 1-1 jQuery鼠標(biāo)事件之click與dbclick事件 用交互操作中牡借,最簡單直接的操作就是...
    mo默22閱讀 1,275評論 0 6