【发布时间】:2017-08-17 16:55:53
【问题描述】:
有什么区别
document.getElementById("id").click();
和
document.getElementById("id").onclick();
?
【问题讨论】:
-
@rene:不,如果你仔细阅读的话,不会。
标签: javascript click
有什么区别
document.getElementById("id").click();
和
document.getElementById("id").onclick();
?
【问题讨论】:
标签: javascript click
click 是 HTML 元素上的一个函数,您可以调用它来触发其点击处理程序:element.click();
onclick 是一个反映onclick 属性的属性,允许您在发生点击时将“DOM0”处理程序附加到元素:element.onclick = function() { /*...*/};(现代等效为addEventListener("click", ...) [或attachEvent在过时的 IE 版本上]。)如果您调用 onclick (element.onclick()),您将调用附加到它的函数,但不会调用附加现代方法的处理程序。
例如,click 触发虚假点击;另一个允许您设置点击处理程序。 (如果您调用 onclick,它只会调用通过旧的 DOM0 机制附加的处理程序。)
例子:
var btn = document.querySelector("input[type=button]");
// Add a modern handler to it
btn.addEventListener("click", function() {
console.log("Modern handler called");
});
// Add an obsolete DOM0 handler to it
btn.onclick = function() {
console.log("DOM0 handler called");
};
// Call `click`
console.log("Calling click():");
btn.click();
// Call `onclick` (which would be VERY unusual)
console.log("Calling onclick():");
btn.onclick();
<input type="button" value="Click Me">
【讨论】:
onclick 是一个属性,所以它应该作为document.getElementById("id").onclick 访问,对吧? document.getElementById("id").onclick() 不会调用返回的函数吗?不过,行为可能会有所不同。
this 在这两种情况下不会有所不同吗?在click() 中,它将是附加处理程序的对象。在onclick() 中,这将是一个普通的函数调用,this 将从调用上下文中继承。 (我不确定)。
this 不是这样工作的。更多:stackoverflow.com/questions/3127429/…(不,this 在两种情况下都是一样的,前提是被调用的函数不是绑定或箭头函数。)