如何解决此非法的break语句?

时间:2019-04-23 13:43:15

标签: javascript

我在每个电台中都有一个循环。基于选择的无线电,用户为其分数赢得一定数量的分数。一旦该分数是8或更高,我就有一个要显示的显示框。问题是我只希望它显示一次,而不是一个分数大于等于8的单个实例。

for (var i = 0; i < allRadiosArr.length; i++) {
  allRadiosArr[i].addEventListener('change', (e)=>{
    totalScoreMain = 0;
    let checkedRadios = document.querySelectorAll('input[type="radio"]:checked');
    checkedRadios.forEach(function(checkedRadio){
      totalScoreMain += parseInt(checkedRadio.getAttribute('value'));
    });
    if (totalScoreMain >= 8) {
      referralModalMain.style.display = 'block';
      break;
    }
  });

  closeButtonMain.addEventListener('click', (e)=>{
  referralModalMain.style.display = 'none';
  });
}

1 个答案:

答案 0 :(得分:0)

您不必break;。使用标志,例如let modalShown = false,然后在第一次显示模态时将其设置为true,并且不再显示。

let modalShown = false;
for (var i = 0; i < allRadiosArr.length; i++) {
  allRadiosArr[i].addEventListener('change', (e)=>{
    totalScoreMain = 0;
    let checkedRadios = document.querySelectorAll('input[type="radio"]:checked');
    checkedRadios.forEach(function(checkedRadio){
      totalScoreMain += parseInt(checkedRadio.getAttribute('value'));
    });
    if (!modalShown && totalScoreMain >= 8) {
      referralModalMain.style.display = 'block';
      modalShown = true;
    }
  });

  closeButtonMain.addEventListener('click', (e)=>{
    referralModalMain.style.display = 'none';
  });
}

编辑:请确保您已阅读并理解在问题中收到的所有有用评论,因为它们比我的简单答案更有价值,并且包含重要建议。