使用 ondblclick 函数影响整个 div 块

Affecting whole div block with ondblclick function

我最近开始学习DOM并且我已经看到了它的一些例子,但是,我正在尝试制作一个函数(获取id),它会在双击后触发。

这是我正在使用的 CSS、HTML 和 JavaScript 代码。

function getID() {
  var x = document.getElementsByClassName("blueblock")[0].id;
  document.getElementById("xx").innerHTML = x;
.blueblock {
  width: 30%;
  height: 50vh;
  float: left;
  background-color: lightblue;
  text-align: justify;
  overflow: auto;
}
<p id="xx" ondblclick="getID()">
  <div class="blueblock" id="bluebl">
    <p>Just some text inside of the block.</p>
  </div>

我应该如何更改我的代码,以便单击 blueblock 的任何部分都会触发函数并输出 id 值?

您需要有有效的 html 元素嵌套,并且您可能应该适应这些部分中的多个部分。这是一个例子。

function getID(el) {
 var x = el.getElementsByClassName("blueblock")[0].id;
  document.getElementById(el.id).innerHTML = x;
  }
.blueblock {
    width:30%;
    height:50vh;
    float:left;
    background-color:lightblue;
    text-align:justify;
    overflow:auto;
}
<div id="xx" ondblclick="getID(this)">
  <div class="blueblock" id="bluebl">
    <p>Just some text inside of the block.</p>
  </div>
</div>
<div id="xx2" ondblclick="getID(this)">
  <div class="blueblock" id="bluebl2">
    <p>Just some more text inside of the block.</p>
  </div>
</div>

发生这种情况是因为您拥有的 <p> 标签没有内容。如果您将文本添加到 <p> 并双击该文本,它将起作用。

解决方法是使用div代替p:

function getID() {
  var x = document.getElementsByClassName("blueblock")[0].id;
  document.getElementById("xx").innerText = x;
}
.blueblock {
  width: 30%;
  height: 50vh;
  float: left;
  background-color: lightblue;
  text-align: justify;
  overflow: auto;
}
<div id="xx" ondblclick="getID()">
  <div class="blueblock" id="bluebl">
    <p>Just some text inside of the block.</p>
  </div>
</div>

第一个 p 元素基本上由下一个 div 元素终止,因为 p(等效段落)不能包含 divs。因此没有看到双击代码,因为实际上第一个 p 元素没有内容。

用 div 替换 p 元素并正确终止,意味着 div 中的任何内容都会导致双击。

但是,请注意并非所有浏览器都支持 ondblclick(请参阅 https://caniuse.com/?search=ondblclick),因此我们通过使用 Javascript.

向元素添加事件侦听器来替换它

这是完整的片段。请注意,当您双击 innerHTML 时,它会被替换,因此如果您再次双击,您将在浏览器的控制台中看到一个错误,因为找不到该元素 - 它不再存在。

<!DOCTYPE html>
<html>
<head>
  <title>Test</title>
  <script>
    function getID() {
      var x = document.getElementsByClassName("blueblock")[0].id;
      document.getElementById("xx").innerHTML = x;
      }
  </script>
  <style>
   .blueblock {
      width: 30%;
      height: 50vh;
      float: left;
      background-color: lightblue;
      text-align: justify;
      overflow: auto;
   }
  </style>
</head>
<body>
<div id="xx">
  <div class="blueblock" id="bluebl">
    <p>Just some text inside of the block.</p>
  </div>
  </div>
<script>
  document.getElementById('xx').addEventListener('dblclick',getID);
</script>
</body>
</html>