You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中修改两个click EventListener以实现相反交互功能

修改方案

核心调整逻辑

你需要新增一个全局变量存储当前选中的文字/空格元素,再把两个点击事件的触发逻辑互换:

  1. 点击文字/空格时:仅记录当前选中的元素,可添加选中状态给用户明确反馈
  2. 点击工具栏标记按钮时:如果已选中目标元素,就对该元素执行标记添加/移除操作

完整修改后代码

// 新增全局变量:存储当前选中的目标元素
let selectedElement = null;
// 可在样式文件中添加 .selected { outline: 2px solid #1677ff; } 作为选中状态提示

var classlist = el.querySelectorAll(".letter, .space");
for (var i = 0; i < classlist.length; i++) {
  classlist[i].addEventListener("click", function(event) {
    // 先清空之前的选中状态
    if (selectedElement) {
      selectedElement.classList.remove('selected');
    }
    // 存储当前选中的元素,沿用原有元素判定规则
    let curElement = this.parentNode;
    if (
      tooltype === "longVowel" ||
      tooltype === "shortVowel" ||
      this.classList.contains("space") === true
    ) {
      curElement = this;
    }
    selectedElement = curElement;
    // 添加选中状态
    selectedElement.classList.add('selected');
  });
}

var classlist = el.querySelector(".toolbar").querySelectorAll("li");
for (var i = 0; i < classlist.length; i++) {
  classlist[i].addEventListener("click", function(event) {
    tooltype = this.className;
    // 没有选中目标元素直接终止逻辑
    if (!selectedElement) return;

    // 原写在元素点击事件里的标记逻辑挪到此处
    var add = true;
    var checklist = selectedElement.querySelectorAll("." + tooltype);
    if (checklist.length > 0) {
      add = false;
    }

    socket0s6.emit("action", {
      slide: demo6,
      action: "markingWords",
      element: selectedElement.id,
      class: tooltype,
      add: add,
    });
    // 可选:标记完成后自动清空选中状态,放开下面两行注释即可
    // selectedElement.classList.remove('selected');
    // selectedElement = null;
  });
}

document.getElementById("slideContainer").appendChild(el);

/*}

//var oReq = new XMLHttpRequest();
//oReq.addEventListener("load", reqListener);
//oReq.open("GET", "slides/lesson0/slide6.html");
//oReq.send();*/

/*************** Server action ******************/
//socket0s6.on('action', function(details) {
var socket0s6 = {
  emit: function(a, details) {
    //  //console.log(details[1]);
    if (details.slide === demo6 && details.action === "markingWords") {
      //document.getElementById(details.element).classList.toggle("active");
      if (details.add) {
        var el = document.createElement("span");
        el.className = details.class;
        document.getElementById(details.element).appendChild(el);
      } else {
        //where we will put code to find and remove existing marks
        var markList = document
          .getElementById(details.element)
          .querySelectorAll("." + details.class);
        console.log(markList);
        for (var i = 0; i < markList.length; i++) {
          markList[i].parentNode.removeChild(markList[i]);
        }
      }
    }
  },
};

内容的提问来源于stack exchange,提问作者kitkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 07:54:04