2011-06-15 65 views
3

這可能很簡單,我忽略了,但是我的google-fu沒有提供任何可以解釋原因的東西。就拿下面的片段(忽略現在嵌入式JS通常被認爲是不好的做法):爲什麼Chrome瀏覽器上的id =「pattern」時嵌入的'OnClick'不起作用?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 
    <title> 
    </title> 
</head> 
<body> 
    <form action=""> 
     <div> 
     <input type="text" id="pattern" value="foobar"> 
     <input type="button" value="Alert" OnClick="alert(pattern.value);"> 
     </div> 
    </form> 
</body> 
</html> 

以上將在IE8和Firefox 3打印警告消息「foobar的」,但Chrome瀏覽器將打印「未定義」。將pattern更改爲pattern_之類的其他內容將按預期方式爲所有三種瀏覽器打印「foobar」。

pattern保留字,或者使用內建的JS庫的一個名字嗎? Chrome瀏覽器無法正常工作的原因是什麼?

+1

有趣怪癖,... – Tomalak 2011-06-15 07:36:34

回答

4

由於內部所提到的瀏覽器連接DOM元素作爲對象全局命名空間(window)。所以,用id="xyz"對象也可以作爲window.xyz或者甚至xyz解決。我想Chrome不會這樣做。

還要檢查my SO-question這一點,尤其是所選擇的答案。

[編輯]後評論:這是Chrome瀏覽器(WebKit的)確實是相關的,它可能有一些做什麼,我發現here。又見quirksmode(搜索頁面的「模式」,它看起來像在HTML5 patterninput的屬性,所以我可以想像,與具有相同名稱的ID干擾)

+2

,將無法解釋的事實是改變ID的工作 – Locksfree 2011-06-15 07:37:41

+0

確定,不夠公平,我只是以後有什麼維克多T.說下去。 Thx – Locksfree 2011-06-15 07:50:55

+0

是的,有趣的,我找不到任何關於這一點。儘管如此,我認爲使用全局變量是不可取的,比如他的代碼中顯示的OP。 – KooiInc 2011-06-15 07:55:08

1

不要使用全局變量訪問DOM元素通過id。有document.getElementById(...)爲此目的,甚至更好 - 在幾乎任何JS庫/框架的選擇器功能(例如,在jQuery的$('#yourid')$('yourid')在原型,等等)。它們保證您可以跨瀏覽器支持,而全局瀏覽器可能會有所不同。

+0

+1的建議。當然我會在實際頁面中使用'getElement(s)*'方法。雖然我仍然對我在試驗時碰到的這個怪癖感到好奇。 – greatwolf 2011-06-15 08:14:02

相關問題