javascript 函数名称不能设置为单击?

IT技术 javascript html
2021-01-29 19:34:47

下面是我的代码,它不起作用。在我将“click()”重命名为“click1()”后,它可以工作了,为什么?

<html>
<head>
    <title></title>
    <script type="text/javascript">
        function click() {
            document.getElementById("content").innerHTML = "abc";
        }
    </script>
</head>

<body>
    <button onclick="click()">try it</button><br />
    <div id="content"></div>
</body>
</html>
6个回答

“onfoo”处理程序属性的字符串值被解释为处理程序函数的主体。换句话说,就好像属性的字符串值被传递给new Function("event", str)使用的处理函数。

此外,该函数的词法范围建立如下,取自 HTML5 规范(我仅参考其对浏览器行为的全面描述):

词法环境作用域
* 让作用域是 NewObjectEnvironment(元素的文档,全局环境)的结果。
* 如果元素有表单所有者,让Scope是 NewObjectEnvironment(元素的表单所有者,Scope)的结果。
* 让Scope成为 NewObjectEnvironment(元素的对象,Scope)的结果。

因此,就好像有多达两个嵌套with块隐式地包裹在代码周围。因此,在这种情况下,效果是这样调用的:

var handler = new Function("event", "with (this) { click(); }");

因为在对应于 的 DOM 元素上有一个“单击”方法<button>,该函数是由处理程序调用的,而不是由脚本标记建立的全局函数。如果“onclick”属性设置为“window.click();” 然后页面正常工作。

已经有一个名为 click 的函数,负责调用事件处理程序。通过声明另一个,您将覆盖第一个,因此该事件不再起作用。

是的,谢谢 - 答案可以在 HTML 5 规范中找到,也可能在其他地方。“onclick”属性的文本被解释为函数体,但添加了with引用元素的隐式块的扭曲如果它在 a 中<form>,那么它也会得到一个隐式with块。
2021-03-14 19:34:47
@Pointy:它是元素的函数。
2021-04-04 19:34:47
这个“点击”功能在哪里?当“onclick”属性的字符串值(有效地)eval()由浏览器提供时,为什么它在词法范围内
2021-04-05 19:34:47
这对我有帮助。我有一个无法触发的名为“export()”的函数。我一直在寻找问题的兔子洞,直到弄清楚方法的名称是问题所在。谢谢!
2021-04-06 19:34:47

click() 是 javascript 的按钮对象的内置。

click() HTML5 中使用的方法的保留名称http://www.w3.org/TR/html5/webappapis.html

click 是预定义的事件。您不应使用预定义的事件。