在我的HTML中,我在
<input type="button" value="Debugger Test" onclick="debugger;" />
<input type="button" value="Prototype Test" onclick="console.log(__proto__);" />
with
作用域包裹在onclick
周围,使得所有的<input>
属性都可以访问,而不需要引用按钮。HTMLInputElement
的原型,使得整个原型链中的所有可作用域属性都可以在该作用域中使用。HTMLDocument
的可作用域部分也包括在内。lang
是其中之一)和几个特定于按钮的属性都被覆盖了。例如,value
、type
也无法工作。同样,来自document
的createElement
变量也无法工作,但来自ParentNode.prototype
的不可作用域的append
可以。
所有这些也在 一个关于全局变量与window
属性冲突的相关问题的答案 中有解释。
你最好使用标准的添加事件监听器的方式:addEventListener
。
<input type="button" value="Test" />
<script>
function lang() {
alert("Hello, World! It’s not an HTML event handler attribute this time");
}
document.querySelector("input").addEventListener("click", lang);
</script>
with
范围内包装 onclick
代码。 - Sebastian SimonaddEventListener
!或者使用任何不是全局属性、任何属性或元素的任何属性或属性名称的函数名称,用于你正在使用 onclick
的元素(每次猜测好运)。只需坚持现代标准(addEventListener
),你通常会遇到较少的问题。 - Sebastian Simononclick
属性都不被鼓励。 - Spencer Wieczorek没有必要复杂化(我真的不知道为什么它不起作用),但你可以使用以下方法:
直接在输入框中添加提示信息。
结果: https://jsfiddle.net/cmedina/h4m1qcoq/6/
或者
给输入框添加监听器。
function lang() {
alert("Hello, World! It's JavaScript this time");
}
document.getElementById('test').onclick = lang
onclick
属性的问题。通过JS分配onclick
事件可以正常工作:document.getElementById('foo').onclick = lang
。 - Spencer Wieczorekanimate
无法工作相同,但是使用lang
而不是animate
。 - Oriol