什么是';单击();在JavaScript中
我在FireFox中玩JavaScript,遇到了一个问题,如以下示例所示:什么是';单击();在JavaScript中,javascript,Javascript,我在FireFox中玩JavaScript,遇到了一个问题,如以下示例所示: <HEAD> <script type="text/javascript"> function click() { alert("click"); } </script> </HEAD> <BODY> <input type="radio" onclick="click()"> </BODY> 函数单击() { 警报(
<HEAD>
<script type="text/javascript">
function click()
{
alert("click");
}
</script>
</HEAD>
<BODY>
<input type="radio" onclick="click()">
</BODY>
函数单击()
{
警报(“点击”);
}
当我点击单选按钮时,没有任何事情发生,也没有错误(在Firebug中)
如果我将函数名更改为do_click,并更改onclick,则会收到警报
所以问题是:发生了什么?click看起来不是保留字或现有符号我认为click()是保留的过程名称,所以不能覆盖它。解释了为什么更改名称而其他任何操作都不起作用。我认为javascript中的click()方法模拟了单击按钮。所以这一定是一种无限循环
编辑为添加:查看click方法的文档内联事件处理程序中的代码的作用域是元素,就好像它在
with
块中一样
因此,在onclick
处理程序中,名称click
解析为元素的click
方法
这可以通过在处理程序中写入
alert(nodeName)
来实现
以下内容将显示click是本机方法:
<input type="radio" onclick="alert(click.toString())">
有一系列关于浏览器事件的优秀文章,“点击”本身并不是Slaks回答的内联事件处理程序上下文之外的javascript 也就是说,问题中定义的“单击”方法是有效的。将事件处理程序附加到“外部”将起作用。例如,使用jQuery:
$('input').click(click);
“无法覆盖”不正确。只是目标不同。天哪,我从来都不知道。甚至在IE中也有相同的行为。现在看来这太危险了……DOM节点上挂起了太多的属性。如果单击处理程序只是试图设置一个全局变量,而该变量恰好与一个节点属性命名相同(例如
innerHTML
),那么。。。。废话。另一个不在内联处理程序中放入任何真实代码的原因。
$('input').click(click);