2010-02-05 35 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);