【问题标题】:stop an IIFE from execution if a condition occurs如果条件发生,则停止执行 IIFE
【发布时间】:2019-05-15 17:21:57
【问题描述】:

我正在尝试构建一个计划用户一周的应用程序,一切正常,除了当用户输入重复时间时出现错误的一件事,但我的问题是应用程序仍在运行计划显示在用户界面。

所以我尝试使用 return 关键字来阻止应用程序继续工作,但这并没有成功,所以这是我的代码:

JavaScript:

var internalController = (function(UICtrl) { 
  var Plan = function(id, from, to, text, goingToCkecked) {
    this.id = id;
    this.from = from;
    this.to = to;
    this.text = text;
    this.goingToCkecked = goingToCkecked;
  };

  var data = {
    Monday: [],
    Tuesday: [],
    Wednesday: [],
    Thursday: [],
    Friday: [],
    Saturday: [],
    Sunday: []
  };

  //the array of the from inputs
  var fromT = [];

  //the array of the to inputs
  var toT = [];

  var Dom = UICtrl.getDOMstrings();

  function removeError(x, y) {
    document.querySelector(x).style.visibility = "hidden";
    document.querySelector(y).classList.remove("error-red");
  }

  function showER() {
    document.querySelector(Dom.errorCase).style.visibility = "visible";
    document.getElementsByClassName(Dom.errorDes)[0].innerHTML = "the \" From time \" is already chosen";
    document.querySelector(Dom.inputTimeF).classList.add("error-red");
  }

  var exit;

  return {
      refuseDuplicatedPlans: function(from, to) {
        var exit;
        if (fromT.indexOf(from) === -1) {
          fromT.push(from);
          exit = false;
        } else {
          console.log('value already exist');
          showER();
          exit = true;
        }
    }
  };
})(UIController);


  var controller = (function(interCtrl, UICtrl) {
    var input, newPlan, DOM;

    DOM = UICtrl.getDOMstrings();

      function setupEventListeners() {
        document.querySelector(DOM.inputBtn).addEventListener("click", ctrlAddPlans);

        document.addEventListener("keypress", function(e) {
          if (e.keyCode === 13) {
            document.activeElement.blur();
            ctrlAddPlans();
          }
        });
      }

      function removeFocus() {
        console.log('remove Focus got trigered');

        document.querySelector(DOM.inputTimeF, DOM.inputTimeT, DOM.inputText).addEventListener("focus", function() {
          // document.activeElement.blur();
          console.log("hello world");
        });
      }

      var ctrlAddPlans = function() {
        //3.get the filed input data
        input = UICtrl.getInput();
        console.log(input);
        // 4.Refuse duplicated plans
        interCtrl.refuseDuplicatedPlans(input.inputTimeF, input.inputTimeT);
        //5.add the plan to the internalController
        newPlan = interCtrl.addItem(input.inputDay, input.inputTimeF, input.inputTimeT, input.inputText, input.goingToCkecked);
        //6.add the plan to the UI
        UICtrl.addPlanList(newPlan, input.inputDay);
        //7.clear the fields;
        interCtrl.clearFields(UICtrl.getDOMstrings().inputTimeF, UICtrl.getDOMstrings().inputTimeT, UICtrl.getDOMstrings().inputText);
      };

      return {
        init: function() {
          console.log('the app has started');
          setupEventListeners();
        },
      };
    })(internalController, UIController);

controller.init();

我希望在refuseDuplicatedPlans() 方法之后短路发生在控制器模块中,当然如果它返回true,我希望模块停止执行并提前感谢你们。

【问题讨论】:

  • 请张贴Minimal, Complete, and Verifiable example 您的尝试说明,准确说明您遇到的问题。
  • 附带说明,优化语法会让您受益匪浅。变量没有在顶部声明,您可以通过使用闭包更好地使用函数来处理小任务,而不是让它们与其余代码紧密耦合

标签: javascript iife


【解决方案1】:

您的 rejectDuplicatedPlans() 方法现在不返回任何内容。请在其中添加一个return语句

refuseDuplicatedPlans: function(from, to) {

        var exit;
              if (fromT.indexOf(from) === -1) {
                fromT.push(from);
                exit=false;
              } else {
                console.log('value already exist');
                showER();
                exit=true;
              }
        return exit;
            }

之后,您可以调用 if else 并在为 true 时停止执行。

if(interCtrl.refuseDuplicatedPlans(input.inputTimeF, input.inputTimeT)){
   reutrn;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-14
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多