【问题标题】:Javascript Alerting DIV content on click button/url点击按钮/网址上的 Javascript 警报 DIV 内容
【发布时间】:2021-12-14 08:53:53
【问题描述】:

您好,我正在尝试理解和学习 Javascripting。 我面临的挑战是要找出如何提醒每个单独的 onclick 内容。 使用循环。

所以我开始摸索,尝试多种方法。 我确实设法让内容得到提醒,但不幸的是没有点击事件。

function raport()
document.querySelectorAll(".fake").forEach(div=>{
text+=div.textContent;
});
alert(text);
}

使用查询选择器搜索类名 .fake 后跟 div=>text.div.textcontent 将变量 text = 设置为 div 的内容。 加载页面后,浏览器成功提醒 html 页面上的 div 内容。

但是当我尝试使用 onclick 事件在单击按钮时触发循环时..

什么都没有发生..

我想添加一个带有特定 id 和代码的按钮:

document.getElementById('demo').onclick = function() {raport()}

HTML 按钮:

<button id= "demo" onclick="raport()">Klik</button>

作为完成它的一种方式,但我没有收到任何错误或内容警报。

我也猜想这不是完成挑战的最有效方式。 因为我应该提醒每个人 这意味着我将复制具有唯一按钮 ID 和 div 类的代码以获得正确的结果。

关于如何让 clickevent 正常工作的任何提示?

任何帮助将不胜感激!

【问题讨论】:

  • 这只是一个拼写错误,您没有打开raport 括号{ 和另一个您没有创建text 变量的可能错误

标签: javascript html jquery css


【解决方案1】:

如果你想点击每个“假”,我总是建议委托

如果你想得到一份东西清单,还有一张地图

window.addEventListener("load", function() { // when the page loads
  const res = document.getElementById("res");
  const fakes = document.querySelectorAll("#demo .fake");
  document.getElementById("demo").addEventListener("click", function(e) {
    const tgt = e.target;
    if (tgt.classList.contains("fake")) {
      res.textContent = tgt.textContent;
    }
  });
  document.getElementById("klik").addEventListener("click", function() { 
    res.innerHTML = [...fakes] // cast the html collection to an array
      .map(fake => fake.textContent) // map the content
      .join(","); 
      
  })
});
<div id="demo">
  <div class='fake'>Hello</div>
  <div class='fake'>Man</div>
</div>
<button type="button" id="klik">Klik</button>
<hr/>
<div id="res"></div>

【讨论】:

    【解决方案2】:

    只是作为演示然后关闭问题,这是一个拼写错误:

    let text ='';
    function raport() {
      text = ''; // add this if you want clean variable everytime click, or just declare into function the variable
      document.querySelectorAll(".fake").forEach(div => {
        text += div.textContent;
      });
      alert(text);
    }
    
    document.getElementById('demo').onclick = function() {
      raport()
    }
    <button id="demo" onclick="raport()">Klik</button>
    <div class='fake'>Hello</div>
    <div class='fake'>Man</div>

    您的评论示例:

    document.querySelectorAll('.fake').forEach(el =>{
      el.addEventListener('click', () =>{
        alert(el.textContent);
      });
    });
    <div class='fake'>Hello</div>
    <div class='fake'>Man</div>
    <div class='fake'>test2</div>

    【讨论】:

    • 当我使所有的 div 类唯一并为每个唯一的 div 类复制 queryselectorall+ foreach 时,这非常有效。仍在试图弄清楚如何在具有不同文本内容的页面上重复使用 1 个循环来处理 1 个 div 类。示例:
      Hello
      World!
      如果我要单击包含文本 Hello 的 div,输出应该是 Alert(Hello)当我单击包含文本 World! 的 div 时它应该提醒(世界!)
    • 有人告诉我,这可以使用简单的 for 循环甚至是 while 循环来完成。但我开始怀疑这是可能的。也许通过使用queryselectorAll将div中的所有文本内容添加到数组中?但是仍然存在识别点击的 div 及其内容的问题? document.getelementbyID?给每个 div 一个唯一的 ID 但相同的类?完成一个 IF 来确定点击的 div id?只是从新手的角度思考,几乎没有知识。
    • 我在我的答案中创建了一个新的 sn-p,当您单击每个 div 时,您可以看到警报将是 div 的 textContent。
    • 哇!棒极了!可以将同样的原则分配给 for() 循环吗?
    • 是的,但为什么不使用 forEach?
    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 2017-03-17
    • 2022-11-04
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    相关资源
    最近更新 更多