1. 程式人生 > >Js先觸發失去焦點事件再執行點選事件解決方法

Js先觸發失去焦點事件再執行點選事件解決方法

最近在做公司的某個從專案,基本設計和淘寶登陸頁類似:
1)文字框內容為空是,文字框右側無清除按鈕,當有內容時立即顯示清除按鈕;
2)當文字框失去焦點時,清除按鈕消失,獲取焦點時若文字框內有內容,則顯示清除按鈕,否則不顯示;
3)文字框再有內容且獲取焦點的情況下,點選清除按鈕,文字框內容置空,且清除按鈕消失。
隨後想了想,感覺是個很簡單的需求,只要結合使用keyup和blur以及click時間就可以解決了,然而,結果卻不是我想要的,程式碼如下:

html程式碼:

<div class="input-group">
    <input type="text" id
="mobile" class="form-control" placeholder="請輸入手機號" autocomplete="off" /> <div class="input-group-addon icon-clear"></div> </div>

js程式碼:

//繫結監聽手機號文字框內容按鈕事件
$('#mobile').keyup(function() {
    var clearBtn = $(this).parent().find('.icon-clear');
    if($(this).val() == '') { clearBtn.hide(); } 
    else
{ clearBtn.css('display', 'table-cell'); } }); //手機號輸入框失去焦點,去除清除按鈕;獲取焦點時,若有值則顯示清除按鈕 $('#mobile').blur(function() { $('#mobile').parent().find('.icon-clear').hide(); }).focus(function(){ if($(this).val() != ''){ $(this).parent().find('.icon-clear').css('display', 'table-cell'); } }); //清除文字框內容事件
$('.icon-clear').click(function() { $(this).parent().find('input').val(''); $(this).hide(); });

這樣看著像是什麼問題都沒有的樣子,其實不然,執行之後發現,在文字框中輸入內容後文本框獲取焦點,這個時候我想要去點選清除按鈕來清除剛才我寫的東西,發現,文字框內容沒有置空,清除按鈕卻先消失了,很納悶啊。

後來經查閱發現,是先執行的失去焦點事件,那麼如何去解決呢?
而後,我在失去焦點事件中對其中的方法進行了延遲處理,如下所示:

//驗證碼輸入框失去焦點,去除清除按鈕;獲取焦點時,若有值則顯示清除按鈕
$('#auth_code').blur(function() {
    setTimeout(function() {  //進行延時處理,時間單位為千分之一秒
        $('#auth_code').parent().find('.icon-clear').hide();
    }, 100)
}).focus(function(){
    if($(this).val() != ''){
        $(this).parent().find('.icon-clear').css('display', 'table-cell');
    }
});

如此操作後就可以完美解決了,目前未發現任何副作用。