Select2外掛 IE下 autofocus bug的解決方法

foreverpx發表於2015-08-11

描述:

Select2外掛在IE中,當頁面載入完畢後會自動的focus,彈出本來應該點選input才會有個提示語。

原因:

在select2的原始碼中第1849行左右,有一段監聽input事件的程式碼,如下:

this.$selection.on('keyup.search input', '.select2-search--inline',function (evt) {
      self.handleSearch(evt);
});

可以看到這裡是使用HTML5的input事件去監聽input中值的變化的,並沒有使用傳統的change或者keydown等事件。

原因就出在這裡,input事件在IE中是有bug的。在IE中,如果一個input帶有placeholder屬性,那麼IE會自動觸發這個input的input事件,而這是在其他瀏覽器中不會發生的。

解決方案

寫一個對於IE的相容性方法,在判斷為IE的時候將input事件替換為keydown事件。

var isIE = (function () {
    var ua = window.navigator.userAgent.toLowerCase();
    if (ua.indexOf("msie") > 0 || ua.indexOf("trident") > 0 ) {
        return true;
    }

    else {
        return false;
    }

}());

var input_event = !isIE ? 'input' : 'keydown';

this.$selection.on('keyup.search '+input_event, '.select2-search--inline',function (evt) {
      self.handleSearch(evt);
});

文章作者:forevercjl
文章原文csdn連結:www.foreverpx.cn
轉載請註明出處。

相關文章