javascript - 在 javascript 中重写事件监听器

标签 javascript

我试图覆盖添加按钮的事件处理程序以在单击更改事件按钮后进行更新。但代码不起作用

document.getElementById("test").addEventListener("click",function(){
  add();		
  document.getElementById("change_event").value="Now change the event";
  document.getElementById("change_event").style.display="block";
});

document.getElementById("change_event").addEventListener("click",function(){

  document.getElementById("test").value="Update";
  document.getElementById("change_event").style.display="none";
  
  document.getElementById("test").addEventListener("click",function(){
      update();		
  });		
});

function add(){
  alert("Add");
}
function update(){
  alert("Update");	
}
<input type="button" value="add" id="test" name="add">
<input type="button" name="change_event" style="display: none" value="change Event" id="change_event">
    	

当我点击添加时,add() 函数将被调用。当我单击现在更改事件时,会出现更新按钮,单击更新按钮后必须调用更新函数。

我的问题是,第一次更新按钮对 add() 函数的调用。 当我单击更新时,只需调用 update()

最佳答案

添加事件时,它们会相互堆叠,这意味着同一元素上可以有多个单击事件,因此它们不会相互覆盖。您必须使用removeEventListener首先删除以前的事件,然后再分配新的事件

var eventWithAdd = function(){
    add();      
    document.getElementById("change_event").value="Now change the event";
    document.getElementById("change_event").style.display="block";

}

...

document.getElementById("test")
    .removeEventListener('click', eventWithAdd)
    .addEventListener('click', function () {update()});

关于javascript - 在 javascript 中重写事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50370156/

相关文章:

javascript - 对输入框中现有值的 HTML5 验证

href 和 onClick 中的 javascript:void(0) 在 IE9 中不起作用

javascript - 我怎样才能让这个按钮在向下滚动时被点击以无限滚动?

javascript - 保持连接活跃

javascript - Laravel 5.3 AJAX 登录不重定向

javascript - 使用 Mapbox 在 pixi-js 或任何其他 webgl/canvas 框架内进行渲染?

javascript - jQuery 复制内容并在追加之前从中删除类

javascript - 批量声明JavaScript关联数组

javascript - knockout : Asynchronous call in model binding

javascript - Google map 标记未显示在我的网站中