【发布时间】: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