javascript - 事件监听器设置在错误的元素上

标签 javascript

我想知道为什么这个 javascript 不起作用:

var element = document.querySelector('#element1');
var button= document.querySelector('#button1');
button.addEventListener('click', function() {
    element.doSomething();
});

var element = document.querySelector('#element2');
var button= document.querySelector('#button2');
button.addEventListener('click', function() {
    element.doSomething();
});

两个按钮都对“element2”执行某些操作。

事件监听器是否保留指向变量而不是其值的指针?

感谢您的回答

最佳答案

你可以用匿名来包装你的 block 级代码;自执行函数。

这类似于在 Java 中用大括号包裹 {/* {{code}} */} 代码块。您可以有重复的变量,只要它们存在于自己的 block 中即可。

这样,变量就可以是相同的。您确实应该创建一个单独的函数并传入选择器 ID;尤其是当他们做同样的事情时。

(function() {
  HTMLDivElement.prototype.doSomething = function () { 
    this.innerHTML = this.innerHTML == 'Hello' ? 'Goodbye' : 'Hello';
  }
}());

(function() {
  var element = document.querySelector('#element1');
  var button = document.querySelector('#button1');
  button.addEventListener('click', function() {
    element.doSomething();
  });
}());

(function() {
  var element = document.querySelector('#element2');
  var button = document.querySelector('#button2');
  button.addEventListener('click', function() {
    element.doSomething();
  });
}());
div {
  display: inline-block;
  width: 5em;
  height: 2em;
  border: thin solid black;
  text-align: center;
  line-height: 2em;
  margin-bottom: 0.25em;
}
<div id="element1">?</div>
<input type="button" id="button1" value="Button 1" />
<br />
<div id="element2">?</div>
<input type="button" id="button2" value="Button 2" />

你应该试试这个。

function addButtonClick(btnSelectorId, elSelectorId) {
  document.querySelector(btnSelectorId).addEventListener('click', function() {
    document.querySelector(elSelectorId).doSomething();
  });
}

addButtonClick('#button1', '#element1');
addButtonClick('#button2', '#element2');

关于javascript - 事件监听器设置在错误的元素上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919140/

相关文章:

javascript - 使用 jquery 时 DOM 操作在 Angular 上很慢

javascript - 如何使 eslint 解析在 jsconfig 中映射的路径

javascript - 是否可以使用 <span> 中的值作为 Ruby 函数的参数?

javascript - Canvas - 路径看起来像是放大的

javascript - 在 2 个单选按钮组之间同步选定的单选按钮 - 相反

javascript - Angular UI 网格 : How do I make a second ui grid visible from a button in the first ui grid?

javascript - Visual Studio 2015 中的 Typescript 设置出现错误 : `exports is not defined` . 如何正确设置?

Javascript 内存泄漏 : why would assigning object to null work?

javascript - 自定义谷歌地图按钮位置

AJAX 加载后的 JavaScript?