首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

jQuery 在 IE9 獲取下拉框默認值失效問題:根因分析與兼容方案

     編輯:更多程式設計知識

IE9 獨有的 Bug:`` 無 `multiple` 且無 `selected` 選項時,**第一個 `

  • IE9 實現缺陷:未在 DOM 屬性上同步 `selectedIndex=0`,導致 jQuery 的 Sizzle 選擇器 `:selected` 匹配失敗(它依賴 `option.selected === true`)。
  • jQuery 版本:1.x/2.x/3.x 均受影響,因底層均用原生 `querySelectorAll` 或屬性遍歷。
  • 三種兼容修復方案

    方案一:原生 DOM `selectedIndex`(推薦,零依賴、最快)

    
    var sel = document.getElementById('city');
    var val = sel.options[sel.selectedIndex].value; // IE9 正常返回 "bj"
    
    • 直接讀取瀏覽器維護的 `selectedIndex`,繞過 jQuery 選擇器。
    • 所有瀏覽器一致,性能最優。

    方案二:jQuery `val()` 直接取值(簡潔,內部已修正)

    
    var val = $('#city').val(); // jQuery 內部用 selectedIndex 邏輯,IE9 正常
    
    • jQuery 1.6+ `val()` 針對 `` 上使用 `:selected` 選擇器。
    • 延伸:IE9 其他表單兼容性坑

      • `` 不支持 → 用 polyfill 或 `` + datepicker。
      • `placeholder` 不支持 → JS 模擬或 Placeholders.js。
      • `FormData` 不支持 → `iframe` 提交或 polyfill。
      • `console.log` 打開 DevTools 前報錯 → `window.console = window.console || {log:function(){}}`。

      IE9 雖已退役,但企業內網、舊系統仍存量巨大。**「特性檢測優於瀏覽器檢測,原生 API 優於庫封裝」** 是應對此類兼容性問題的黃金法則。

    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved