<input type="button" onclick="subNum(<%=rs.getString("name")%>)">
// 生成的 HTML 可能變成:onclick="subNum(張三)"
點擊按鈕,subNum 內 alert(string) 彈出 [object HTMLInputElement];若傳數字 onclick="subNum(123)" 則正常。
字符串參數未加引號。瀏覽器將 onclick="subNum(張三)" 解析為:調用 subNum 並傳遞變量 張三(未定義),但在某些上下文中 張三 被誤認為同名 DOM 元素的 ID/Name,導致傳入該元素對象。
<input type="button" onclick="subNum('<%=rs.getString("name")%>')">
// 生成:onclick="subNum('張三')"
單引號包裹字符串字面量,確保 JS 引擎識別為字符串類型。
<input type="button" id="btn" data-name="<%=rs.getString("name")%>">
document.getElementById('btn').addEventListener('click', function() {
subNum(this.dataset.name); // 安全獲取字符串
});
onclick 字符串拼接的轉義地獄(雙引號、單引號、HTML 實體、JS 轉義交織)。data-* 屬性,JS 通過 dataset 讀取,清晰安全。一對引號,拯救調試半小時;分離綁定,代碼更優雅。