Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是';单击();在JavaScript中_Javascript - Fatal编程技术网

什么是';单击();在JavaScript中

什么是';单击();在JavaScript中,javascript,Javascript,我在FireFox中玩JavaScript,遇到了一个问题,如以下示例所示: <HEAD> <script type="text/javascript"> function click() { alert("click"); } </script> </HEAD> <BODY> <input type="radio" onclick="click()"> </BODY> 函数单击() { 警报(

我在FireFox中玩JavaScript,遇到了一个问题,如以下示例所示:

<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);