javascript - 禁用元素外部的点击

标签 javascript html css

我体内有一个包含可点击按钮的按钮。我希望此 div 之外的所有元素都不可点击。

我尝试用我的 H1 覆盖整个 body 并添加 pointer-events: none 和 z-index +1 到我的 div,但在我的 div 之外仍然检测到点击。

我不能对 Body 指针事件做任何事情,因为那会禁用我的整个页面..

这是一个问题,因为当轮到玩家 2 时,如果玩家 2 不小心点击了游戏板外,那么他们将放下 X 而不是所需的 O

<body>
  <h1> Tic-Tac-Toe</h1>

<div class="gameboard">
    <button class="tic" id="1" onclick="clicked()"></button>
    <button class="tic" id="2" onclick="clicked()"></button>
    <button class="tic" id="3" onclick="clicked()"></button>
    <button class="tic" id="4" onclick="clicked()"></button>
    <button class="tic" id="5" onclick="clicked()"></button>
    <button class="tic" id="6" onclick="clicked()"></button>
    <button class="tic" id="7" onclick="clicked()"></button>
    <button class="tic" id="8" onclick="clicked()"></button>
    <button class="tic" id="9" onclick="clicked()"></button>
  </div>

  <script type="text/javascript" src="js/app.js"></script>
</body>
</html>

最佳答案

如果您使用成熟的 JavaScript eventListener 而不是仅仅将 onclick 属性添加到您的一些 HTML 元素,您可能会更轻松。

您通过 addEventListener 方法命名的任何函数都会自动访问触发它的事件(例如 click 事件)。当你定义函数时,你只需给它一个参数(可以命名为任何东西,但是“event”是一个非常直观的选择)——然后在函数内部,你访问 event 对象作为具有相同名称的局部变量。

event 对象有一个名为 target 的属性,它包含事件发生的 HTML 元素(在这种情况下,希望您的纽扣)。一旦您知道用户点击了什么,您就可以采取相应的行动——比如响应点击或忽略它:

document.addEventListener("click", handleTicClick); // Runs the function when a click happens

function handleTicClick(event){
  const whatGotClicked = event.target; // Remembers the HTML element that got clicked
  if(whatGotClicked.classList.contains("tic")){ // Checks a condition related to the element
    console.log(`Hey, somebody clicked on button #${whatGotClicked.id}!`);
  }
  else{
    console.log("Let's just ignore this click");
  }
}
button{ margin-bottom: 0.3em; }
<h1> Tic-Tac-Toe</h1>
<div class="gameboard">
  <button class="tic" id="1">_</button>
  <button class="tic" id="2">_</button>
  <button class="tic" id="3">_</button>
  <br />
  <button class="tic" id="4">_</button>
  <button class="tic" id="5">_</button>
  <button class="tic" id="6">_</button>
  <br />
  <button class="tic" id="7">_</button>
  <button class="tic" id="8">_</button>
  <button class="tic" id="9">_</button>
</div>

关于javascript - 禁用元素外部的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57243780/

相关文章:

javascript - Angularjs:在括号中显示负数?

javascript if 语句不起作用

javascript - 为什么 Chrome 不允许在调试中更改变量

html - 为什么 html 页面的正文在 Edge 和 IE 中不能扩展到全宽但对于所有其他浏览器都可以?

javascript - 将关闭按钮添加到 JavaScript 动画面板

javascript - 使用javascript交换堆栈中的元素

javascript - MTurk : Posting experimental conditions simultaneously, 但只允许每个 worker 看到其中一个条件

javascript - 搜索表单 : submit when a name is clicked

jquery - 幻灯片效果在我的网站上不起作用

html - Twitter Bootstrap favicon.ico