javascript - 如何制作只能单击一次的元素?

标签 javascript html

我不久前开始使用javascript,并制作了一个简单的井字游戏。但是当我单击一个框两次时,o 和 x 显示。我只想展示一个。如果我的代码不干净,请随时告诉我如何清理它。如果你需要的话我可以给你html代码。感谢您抽出时间来帮助我。

let case1 = document.getElementById('case1');
let case2 = document.getElementById('case2');
let case3 = document.getElementById('case3');
let case4 = document.getElementById('case4');
let case5 = document.getElementById('case5');
let case6 = document.getElementById('case6');
let case7 = document.getElementById('case7');
let case8 = document.getElementById('case8');
let case9 = document.getElementById('case9');

let i = 0;
let oui = 0;

case1.onclick = function(){
    if (i== 0){
        document.getElementById('un').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('deux').style.display = "block";
        i--;
    }
    case1.onclick.removeAttribute();
};

case2.onclick = function(){
    if (i==0){
        document.getElementById('trois').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('quatre').style.display = "block";
        i--;
    }
};

case3.onclick = function(){
    if (i==0){
        document.getElementById('cinq').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('six').style.display = "block";
        i--;
    }

};

case4.onclick = function(){
    if (i==0){
        document.getElementById('sept').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('huit').style.display = "block";
        i--;
    }
};

case5.onclick = function(){
    if (i==0){
        document.getElementById('neuf').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('dix').style.display = "block";
        i--;
    }
};

case6.onclick = function(){
    if (i==0){
        document.getElementById('onze').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('douze').style.display = "block";
        i--;
    }
};

case7.onclick = function(){
    if (i==0){
        document.getElementById('treize').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('quatorze').style.display = "block";
        i--;
    }
};

case8.onclick = function(){
    if (i==0){
        document.getElementById('quinze').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('seize').style.display = "block";
        i--;
    }
};

case9.onclick = function(){
    if (i==0){
        document.getElementById('dixsept').style.display = "block";
        i++;
    }
    else if (i==1){
        document.getElementById('dixhuit').style.display = "block";
        i--;
    }
};

这是 html

  <body>
    <div id="contener" style="display: flex; position: relative;">
        <div class ="case" id="case1"><i id="un" class="far fa-circle fa-10x"></i><i id="deux"class="fas fa-times fa-10x"></i></div>
        <div class ="case"id="case2"><i id="trois"class="far fa-circle fa-10x"></i><i id="quatre"class="fas fa-times fa-10x"></i></div>
        <div class ="case" id="case3"><i id="cinq"class="far fa-circle fa-10x"></i><i id="six"class="fas fa-times fa-10x"></i></div>
        <div class ="case" id="case4"><i id="sept"class="far fa-circle fa-10x"></i><i id="huit"class="fas fa-times fa-10x"></i></div>
        <div class ="case" id="case5"><i id="neuf"class="far fa-circle fa-10x"></i><i id="dix"class="fas fa-times fa-10x"></i></div>
        <div class ="case" id="case6"><i id="onze"class="far fa-circle fa-10x"></i><i id="douze"class="fas fa-times fa-10x"></i></div>
        <div class ="case" id="case7"><i id="treize"class="far fa-circle fa-10x"></i><i id="quatorze"class="fas fa-times fa-10x"></i></div>
        <div class ="case" id="case8"><i id="quinze"class="far fa-circle fa-10x"></i><i id="seize"class="fas fa-times fa-10x"></i></div>
        <div class ="case" id="case9"><i id="dixsept"class="far fa-circle fa-10x"></i><i id="dixhuit"class="fas fa-times fa-10x"></i></div>
    </div>
    </body>

最佳答案

我没有适合您的解决方案,但有一些代码提示。如果您也发布 html,我可以给您一个解决方案:)。尽管如此,这里还是我对更好的代码的建议:

  1. 可能使用计数器和模数而不是加法和减法,例如:
if (++i % 2){
  document.getElementById('trois').style.display = "block";
} else {
  document.getElementById('quatre').style.display = "block";
}
  • 最好使用一个适用于所有情况的函数来解决这个问题,只需将 dom 对象传递给被单击的函数即可。我不知道你的 HTML,但也许你也可以给元素提供更好的名称,这样你就可以动态地找到它们。示例 ID 为 box1-crossbox1-circle
  • 编辑:

    所以在我看到 html 后,你应该只在圆形和十字元素上使用类名。您可以使用查询选择器查找元素:case1.querySelector('.cross')

    最终的解决方案可能如下所示:

    JS:

    let counter = 0;
    
        document.querySelectorAll('.case').forEach(c => c.addEventListener('click', () => {
          if (c.classList.contains("set")) return;
          c.classList.add("set");
          if (++counter % 2) {
            c.querySelector('.circle').style.display = "block";
          } else {
            c.querySelector('.cross').style.display = "block";
          }      
        }));
    

    HTML:

      <div id="contener" style="display: flex; position: relative;">
        <div class="case" id="case1"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
        <div class="case" id="case2"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
        <div class="case" id="case3"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
        <div class="case" id="case4"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
        <div class="case" id="case5"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
        <div class="case" id="case6"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
        <div class="case" id="case7"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
        <div class="case" id="case8"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
        <div class="case" id="case9"><i class="far fa-circle fa-10x circle"></i><i class="fas fa-times fa-10x cross"></i></div>
      </div>
    

    关于javascript - 如何制作只能单击一次的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59023535/

    相关文章:

    javascript - 每页打印的 HTML 脚注

    javascript - d3js 只更新一次

    javascript - jQuery 点击不返回任何值

    javascript - 选择 select 元素中的第一个启用选项

    javascript - 尽管在 Controller 中使用数组语法,AngularJS 代码并未正确缩小

    javascript - 如何在静态非 Meteor 页面中使用 Tracker.autorun?

    javascript - 将 li 列表制作成在 javascript 中不起作用的列

    html - IE7后台问题

    php - 如何使邮件形成工作

    javascript - 单击图库中的图像并在同一页面中显示多个图像