单击正文中的按钮时,如何停止正文中的事件?

如何解决单击正文中的按钮时,如何停止正文中的事件?

所以我想在我点击正文时创建按钮,但是当我点击正文中的一个按钮时,我不想创建另一个按钮。那么我该如何处理呢?我尝试停止传播但不起作用



           /*  var body = document.getElementsByTagName("body")[0];*/

           document.body.onclick = function(event) {
                   var x = event.clientX;
                   var y = event.clientY;
                   var btn = document.createElement("button");
                   btn.style.position = "absolute";
                   btn.style.left = x + "px";
                   btn.style.top = y + "px";
                   btn.innerHTML = "click me";
                   document.body.appendChild(btn);
                   btn.className = "buton";
                   event.stopPropagation;
                   var butoane = document.getElementsByClassName("buton");
                   for (let i = 0; i < butoane.length; i++) {
                       butoane[i].onclick = function() {
                           alert("ai apasat butonul" + (i + 1));

                       }

                   }
               }

解决方法

event.stopPropagation 是一个函数,你需要调用它,类似于 event.stopPropagation() 但无论如何,它不会做你想要的。 您可以忽略对您创建的按钮的点击,如下所示:

document.body.onclick = function(event) {
  if (event.target.classList.contains('buton')) {
    return;
  }
  var x = event.clientX;
  var y = event.clientY;
  var btn = document.createElement("button");
  btn.style.position = "absolute";
  btn.style.left = x + "px";
  btn.style.top = y + "px";
  btn.innerHTML = "click me";
  document.body.appendChild(btn);
  btn.className = "buton";
  event.stopPropagation;
  var butoane = document.getElementsByClassName("buton");
  for (let i = 0; i < butoane.length; i++) {
    butoane[i].onclick = function() {
      alert("ai apasat butonul" + (i + 1));

    }

  }
}
<button>Button</button>

它的作用是检查被点击的元素是否有 buton 类,如果有,则返回(不要运行生成按钮的代码)。

此外,您可以改进这一点,而不是转到您创建的每个按钮来重置它的 onclick 侦听器,您可以执行以下操作:

btn.onclick = function() {
  alert("ai apasat butonul" + butoane.length);
}
,

尽量不要使用 .onclick 更好地使用 .addEventListener(event,handle) 然后如果你需要你可以删除事件监听器

你写错了.stopPropagation()

let ev = document.body.addEventListener("click",bodyclick)
let butoane = ""

function bodyclick(event){
   let x = event.clientX;
   let y = event.clientY;
   let btn = document.createElement("button");
   btn.style.position = "absolute";
   btn.style.left = x + "px";
   btn.style.top = y + "px";
   btn.innerHTML = "click me";
   document.body.appendChild(btn);
   btn.className = "button";
   event.stopPropagation();
   butoane = document.querySelectorAll(".button");
  butoane[butoane.length - 1].addEventListener("click",buttonclick) // add event only for just added button,not for all buttons again
}

function buttonclick(ev){
  ev.stopPropagation()
  alert("press button ",ev.currentTarget)
}
body{
width: 100%;
height: 100vh;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?