【问题标题】:What's the difference between .click() and .onclick() in javascript? [duplicate]javascript中的.click()和.onclick()有什么区别? [复制]
【发布时间】:2017-08-17 16:55:53
【问题描述】:

有什么区别

document.getElementById("id").click();

document.getElementById("id").onclick();

?

【问题讨论】:

标签: javascript click


【解决方案1】:

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() 不会调用返回的函数吗?不过,行为可能会有所不同。
  • @AjayBrahmakshatriya:是的,会的。我会澄清的。
  • 另外,this 在这两种情况下不会有所不同吗?在click() 中,它将是附加处理程序的对象。在onclick() 中,这将是一个普通的函数调用,this 将从调用上下文中继承。 (我不确定)。
  • @AjayBrahmakshatriya: “这将是一个正常的函数调用,这将继承自调用上下文” this 不是这样工作的。更多:stackoverflow.com/questions/3127429/…(不,this 在两种情况下都是一样的,前提是被调用的函数不是绑定或箭头函数。)
  • 谢谢!我不确定这个案子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2011-12-29
  • 1970-01-01
  • 2018-03-15
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多