为啥我不能从 onclick 属性调用名为 clear 的函数?
Posted
技术标签:
【中文标题】为啥我不能从 onclick 属性调用名为 clear 的函数?【英文标题】:Why can't I call a function named clear from an onclick attribute?为什么我不能从 onclick 属性调用名为 clear 的函数? 【发布时间】:2022-01-17 04:21:17 【问题描述】:我正在尝试创建一个简单的计算器,当单击按钮时,它的值会显示在文本字段中,并且按钮“C”应该清除文本字段但它的 onclick="clear()" 不起作用? ?
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Calculator</title>
<style>
#button
padding: 10px;
</style>
<script>
function fill(val)
document.getElementById("field").value+=val;
function clear()
document.getElementById("field").value="";
</script>
</head>
<body>
<form>
<table>
<tr><input type="text" name="field" id="field" size="8"/></tr>
<%! int k = 1; %>
<% for(int i=0;i<3;i++) %>
<tr> <%
for(int j=0;j<3;j++) %>
<td><input type="button" id="button" onclick="fill(this.value)" value="<%=k++%>" /></td>
<% %>
</tr>
<% %>
<tr>
<!--here onclick="clear()" is not working?? -->
<td><input type="button" id="button" value="C" onclick="clear()"/></td>
<td><input type="button" id="button" value="0" onclick="fill(this.value)"</td>
<td><input type="submit" id="button" value="="</td>
</tr>
</table>
</form>
</body>
</html>
【问题讨论】:
您遇到了客户端问题。不要向我们展示服务器端代码。获取 HTML 输出。 您没有关闭按钮标签。奇怪的语法突出显示应该是一个线索 您的 HTML 无效。使用validator.w3.org/nu 好吧,据我所知,你的最后两个输入是一场灾难:第一个没有关闭,而第二个没有关闭并且有一个 caotic 值:value="="
,你应该首先解决这些问题。
使用不同的 ID。这就是为什么它叫 id。将您的脚本放在正文末端而不是头部。有时您会触发尚未加载(正文)的某些内容。
【参考方案1】:
内在的事件属性(如onclick
)是可怕的。他们在内部实现with
:
不建议使用 with 语句,因为它可能是混淆错误和兼容性问题的根源。
因此,您实际上是在调用 document.clear()
而不是您的全局 clear()
。
对此的快速解决方法是将函数重命名为其他名称或显式调用window.clear()
。
更好的解决方案是将您的事件处理程序与addEventListener
绑定,而不是内在的事件属性。
【讨论】:
内部处理程序在其作用域链上有许多对象,包括当前元素和文档,以及可能的祖先元素(例如,表单控制处理程序在其作用域链上有表单)。 with 是否用于此没有实际意义。并不总是很清楚将在这些元素上解析哪个标识符(例如,ID 始终在当前目标上,动作将在父表单上,className 可能在任何地方)或全局/窗口对象。更好地命名全局标识符(例如不太可能发生冲突,更具描述性)也有帮助。 哇...什么东西。以前不知道这个。 因此,您实际上是在调用 document.clear() 而不是全局 clear()。 - 为什么document
在那里?你知道这个with
功能如何与onclick
类似的属性一起工作吗?
@Maximus — 因为,如屏幕截图所示,有一个使用文档对象的 With 块。
@Quentin,我可以看到:)。我想知道为什么它使用document
作为with object
【参考方案2】:
您的 HTML 存在问题,但您的函数无法正常工作的原因是它的名称“clear”,该名称已由 document.clear()
定义。
将该函数的名称更改为clearField()
之类的名称即可。
【讨论】:
以上是关于为啥我不能从 onclick 属性调用名为 clear 的函数?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能使用 onClick 在 jQuery $(document).ready 函数中执行函数?