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

jQuery prop() 方法版本相容性陷阱:1.6+ 才支援、舊版請用 attr()

     編輯:程式設計綜合問答

現象複現

function onshowchange(show) {
    var id = $(show).prop("id");           // 正常
    var isshow = $(show).prop("showed");   // 自訂屬性
    alert(typeof(isshow));                 // 不彈出!
}
function onshowchange(show) {
    alert("ok");                           // 這行在前面就正常
    var id = $(show).prop("id");
    var isshow = $(show).prop("showed");
}

第二個版本能彈出 "ok",說明程式執行到此;第一個版本連 "ok" 都不彈,代表 prop() 拋出例外中斷執行。

根因:jQuery 版本過舊

  • prop() 於 jQuery 1.6 (2011/05) 新增
  • 1.6 之前 不存在 prop(),呼叫會拋 TypeError: $(...).prop is not a function
  • 舊版請用 attr() 取得 HTML 屬性值

prop() vs attr() 關鍵差異

屬性類型prop()attr()
原生 DOM 屬性 (id, class, checked, disabled, value...)✅ 回傳當前狀態 (布林/字串/數值)⚠ 回傳初始 HTML 屬性值
自訂屬性 (showed, data-*)✅ 可讀寫✅ 可讀寫
布林屬性 (checked, selected, disabled)✅ true/false⚠ "checked"/undefined

自訂布林屬性寫法建議

<div showed="true">...</div>       <!-- HTML5 建議 data-showed="true" -->
// 讀取
var shown = $(div).prop("showed");  // 回傳字串 "true"
var shownBool = $(div).is("[showed]"); // 回傳布林 true/false (推薦)

// 寫入
$(div).prop("showed", "false");     // 字串
$(div).attr("showed", "false");     // 同效
$(div).removeAttr("showed");        // 移除屬性

解決方案

  1. 升級 jQuery 至 3.x (最新穩定版)
  2. 或全專案替換 .prop( → .attr( (僅讀取 HTML 屬性時)
  3. 引入 jquery-migrate 套件暫時相容舊寫法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved