发送按钮 EventListener 否则

如何解决发送按钮 EventListener 否则

我有一个反馈表,其中包含 3 张可点击的图片用于用户满意度评分: [1]:https://i.stack.imgur.com/hsUkd.png

对 JavaScript 相当陌生。当我在我的脚本上运行 .addeventListener 时,它在第一个 if 语句上工作,如果我删除 elses,它会交替运行 if 。 下面是 html 和 javascript:

 <div id="panel" class="panel-container">
      <strong>How satisfied are you with our customer support performance?</strong>
      <div class="ratings-container">
        <div class="rating" id="sad">
          <img src="https://image.flaticon.com/icons/svg/187/187150.svg" alt=""/>
          <small>Unhappy</small>
        </div>
        <div class="rating" id="meh">
          <img src="https://image.flaticon.com/icons/svg/187/187136.svg" alt=""/>
          <small>Neutral</small>
        </div>
        <div class="rating active" id="happy">
          <img src="https://image.flaticon.com/icons/svg/187/187133.svg" alt=""/>
          <small>Satisfied</small>
        </div>
      </div>
      <button class="btn" id="send">Send review</button>
    </div>

和 Javascript:

const ratingsEl = document.querySelectorAll(".rating");
const sendBtn = document.querySelector("#send");
const panel = document.querySelector("#panel");
const sad = document.querySelector("#sad");
const meh = document.querySelector("#meh");
const happy = document.querySelector("#happy");



ratingsEl.forEach((el) => {
  el.addEventListener("click",() => {
    ratingsEl.forEach((innerEl) => {
      innerEl.classList.remove("active");
    });

    el.classList.add("active");
  });
});

sendBtn.addEventListener("click",() => {
    if(sad){
        panel.innerHTML = `
        <p>sad</p>
    `;
    }

     else if(meh){
        panel.innerHTML = `
        <p>meh</p>
    `;
    }
     else if(happy){
        panel.innerHTML = `
        <p>Feedack for this</p>
    `;
    }
});

我试过使用:

ev.currentTarget.id == "myId" 

在我的 if 块中的函数 并为每个块尝试了不同的事件侦听器,但没有奏效。

我想到了使用

button.tagName === "myId"

在我的 if 中的某个时候声明,但我对所有 3 个都使用一个按钮。

请帮忙

解决方法

在全局变量中跟踪活动评论并在选择新评论时更新它,并在点击按钮时更新它。

这样做您不必逐一选择所有元素并检查哪个元素具有 active 类。

const ratingsEl = document.querySelectorAll(".rating");
const sendBtn = document.querySelector("#send");
const panel = document.querySelector("#panel");

let review = "happy";

ratingsEl.forEach((el) => {
  el.addEventListener("click",(e) => {
    ratingsEl.forEach((innerEl) => {
      innerEl.classList.remove("active");
    });
    el.classList.add("active");
    review = el.id;
  });
});

sendBtn.addEventListener("click",() => {
  panel.innerHTML = `<p>${review}</p>`;
});
img {
  width: 20px;
}

.rating {
  display: flex;
  align-items: center;
  margin: 0.5rem 0;
}

.rating small {
  margin-left: 0.5rem;
  cursor: pointer;
}

.rating.active small{
  font-weight: bold;
}
<div id="panel" class="panel-container">
  <strong>How satisfied are you with our customer support performance?</strong>
  <div class="ratings-container">
    <div class="rating" id="sad">
      <img src="https://image.flaticon.com/icons/svg/187/187150.svg" alt="" />
      <small>Unhappy</small>
    </div>
    <div class="rating" id="meh">
      <img src="https://image.flaticon.com/icons/svg/187/187136.svg" alt="" />
      <small>Neutral</small>
    </div>
    <div class="rating active" id="happy">
      <img src="https://image.flaticon.com/icons/svg/187/187133.svg" alt="" />
      <small>Satisfied</small>
    </div>
  </div>
  <button class="btn" id="send">Send review</button>
</div>

或者,您可以单独检查哪个元素中包含 active 类。

另外,我建议避免使用 innerHTML 设置内容,而是创建一个元素并附加它。

sendBtn.addEventListener("click",() => {
  panel.innerHTML = "";
  const usrReview = document.createElement("p");
  usrReview.innerText = review;
  panel.appendChild(usrReview);
});
,

考虑您编写的代码:

if (sad) {
    // ...
}
else if (meh) {
    // ...
}
else if (happy) {
    // ...
}

sadmehhappy 在用作条件时都计算为 true。由于第一个 if 的条件计算为 true,因此每次只运行该块。

您应该检查 sadmehhappy 中的哪个元素具有 active 类。

请改用以下代码

sendBtn.addEventListener("click",() => {
    if(sad.classList.contains("active")){
        panel.innerHTML = `
        <p>sad</p>
    `;
    }

    else if(meh.classList.contains("active")){
        panel.innerHTML = `
        <p>meh</p>
    `;
    }

    else if(happy.classList.contains("active")){
        panel.innerHTML = `
        <p>feedack for this</p>
    `;
    }
});
,

补充上面的答案。 如果您只想添加和删除它,也可以使用切换开关。

https://jsfiddle.net/Lmqdhgnj/3/

const ratingsEl = document.querySelectorAll(".rating");
const sendBtn = document.querySelector("#send");
const panel = document.querySelector("#panel");
const sad = document.querySelector("#sad");
const meh = document.querySelector("#meh");
const happy = document.querySelector("#happy");

ratingsEl.forEach((el) => {
  el.addEventListener("click",(event) => {
    toggle(el,"active");
  });
});

function toggle(el,className) {
        el.classList.toggle(className);
}

sendBtn.addEventListener("click",() => {
        console.log(sad.className,meh.className,happy.className)
    if(sad.className.includes("active")){
        panel.innerHTML = `
        <p>sad</p>
    `;
    }

     if(meh.className.includes("active")){
        panel.innerHTML = `
        <p>meh</p>
    `;
    }
    if(happy.className.includes("active")){
        panel.innerHTML = `
        <p>feedack for this</p>
    `;
    }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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元字符(。)和普通点?