2010-02-05 63 views
24

我是用JavaScript玩弄在FireFox「點擊()」,並創下了在下面的例子說明了一個問題:什麼是JavaScript的

<HEAD> 
<script type="text/javascript"> 
function click() 
{ 
    alert("click"); 
} 

</script> 
</HEAD> 

<BODY> 

<input type="radio" onclick="click()"> 
</BODY> 

當我點擊單選按鈕,什麼都不會發生,並且沒有錯誤(在Firebug中)

如果我將函數的名稱更改爲do_click,並更改onclick,則會得到警報。

所以問題是:發生了什麼?點擊看起來不是保留字或現有符號

回答

35

聯事件處理程序中的代碼可以被限制在元素的文檔,如果它是在一個with區塊。

因此,在onclick處理程序中,名稱click解析爲元素的click方法。

這可以通過在處理程序寫入alert(nodeName)demonstrated

+0

聖*,我*從未知道這一點。即使在IE中表現相同。這現在看起來很危險...... – 2010-02-05 01:56:47

+1

我也沒有,直到我讀到這個問題。 – SLaks 2010-02-05 01:57:36

+4

有很多屬性掛在DOM節點上。如果點擊處理程序只是簡單地設置一個全局變量,這個變量碰巧被命名爲與其中一個節點屬性相同(例如'innerHTML'),那麼.... *廢話*。 – 2010-02-05 01:59:51

0

我認爲click()是一個保留的過程名稱,因此您不能覆蓋它。解釋爲什麼更改名稱,而沒有別的方法可以使其工作。

+0

「無法覆蓋」是不正確的。只是目標不同而已。 – bryantsai 2010-02-05 01:53:39

0

我認爲JavaScript中的click()方法模擬點擊按鈕。因此,這必須是一種無限循環......

編輯補充:退房MSDN的點擊方法

7

DOM元素具有天然click()方法。

以下將顯示,點擊是本地方法:

<input type="radio" onclick="alert(click.toString())"> 

您可以點擊功能的事件處理程序如下注冊。在處理程序中,this將引用HTML元素。

<input type="radio" id="foo" > 

function click() 
{ 
    alert("click"); 
} 
document.getElementById('foo').onclick = click; 

有一個在http://www.quirksmode.org/js/introevents.html

0

優良的一系列關於瀏覽器事件的文章「點擊」本身不是內嵌事件處理程序作爲Slaks回答環境之外一個javascript reserved keyword

也就是說問題中定義的「click」方法是有效的。附加事件處理程序「外部」將工作。例如。使用jQuery:

$('input').click(click);