<img onclick="click()" id="rockman" src="..." />
<script>
function click() { // 自定義函數
var username = prompt('what is your name?', 'enter your name here.');
if (username && username != 'enter your name here.')
alert('It is good to see you, ' + username + '.');
}
</script>
點擊圖片,`prompt`/`alert` 均不彈出,主控台無錯誤。
<img> 元素繼承自 `HTMLElement`,原生擁有 click() 方法 (程式化觸發點擊事件)。內聯事件處理器 `onclick="click()"` 的作用域是**該元素本身**,呼叫 `click()` 解析為 `this.click()`,即**觸發元素原生點擊**,進入無限遞迴或被瀏覽器忽略,**而非呼叫全域 `window.click()` 函數**。
<img onclick="window.click()" ... />
function handleImageClick() { ... }
<img onclick="handleImageClick()" ... />
<img id="rockman" src="..." />
<script>
document.getElementById('rockman').addEventListener('click', function() {
var username = prompt('what is your name?', 'enter your name here.');
if (username && username !== 'enter your name here.')
alert('It is good to see you, ' + username + '.');
});
</script>
| 方法名 | 所屬介面 | 衝突場景 |
|---|---|---|
| `submit()` | `HTMLFormElement` | `onsubmit="submit()"` → 表單遞迴提交 |
| `reset()` | `HTMLFormElement` | `onclick="reset()"` → 表單重置 |
| `focus()` / `blur()` | `HTMLElement` | 同理 |
| `close()` | `Window` / `MessagePort` | 全域 `close()` 衝突 |
這個陷阱是 JavaScript **作用域鏈** 與 **DOM 原型鏈** 交互的經典案例,理解後終身受益。