如果发生无效输入,如何使函数返回到某个位置
How to make the function return to a certain place if invalid input takes place?
我有一个函数
function Choice(options) {
wait()
function wait(){ // only proceed after a selection is made;
selection = parseInt(selectedchoice);
if (selection < 1){
setTimeout(wait,1000);
console.log("Not chosen yet");
selection = parseInt(selectedchoice);
}
else if (selection == 1 || selection == 2){
// Finding what the user selected
for (var i in options.choices) {
m++
if (m === selection){
//console.log("PICK IS " + i);
pick = i;
break
}
}
console.log(options.choices[pick].condition)
if (selection >= options.choices.length || selection <= 0 || options.choices[pick].condition === false ) {
selection = 0;
//Choice(options);
console.log("Invalid selection");
//USE MAGIC HERE
}
else {
console.log("Valid selection");
}
}
}
}
如果用户选择了一个无效的选择,他应该被告知这一点,并向后扔一点以再次选择。显然,即使在将selection重置为0之后,再次调用函数Choice(options)也会导致无限递归。投掷也是如此(尽管我不知道如何正确使用它们)。
问题是:如果发生错误,如何让程序再次执行函数Choice()?
将if
更改为while
这样。当没有选择发生时,代码停留在这个块上,只有当用户选择时才继续
function Choice(options) {
wait()
function wait() { // only proceed after a selection is made;
selection = parseInt(selectedchoice);
while (selection !== 1 || selection !== 2 ) {
selection = parseInt(selectedchoice);
}
// Finding what the user selected
for (var i in options.choices) {
m++
if (m === selection) {
//console.log("PICK IS " + i);
pick = i;
break
}
console.log(options.choices[pick].condition)
if (selection >= options.choices.length || selection <= 0 || options.choices[pick].condition === false) {
selection = 0;
//Choice(options);
console.log("Invalid selection");
//USE MAGIC HERE
} else {
console.log("Valid selection");
}
}
}
我认为你处理这个问题的方法是错误的。您不应该使用setTimeout
来"监视"值的更改;相反,您应该让您的逻辑由事件驱动。
在这种情况下,您希望将change
[doc]事件处理程序附加到您的select元素。无论何时调用事件处理程序,您都会确信select元素的值已更改,然后您就可以对用户的选择执行相应的操作。例如,
HTML:
<select id="select" onchange="onSelectChange()">
<option value="0">Please choose...</option>
<option value="1">Value 1</option>
<option value="2">Value 2</option>
</select>
JS:
function onSelectChange() {
var selection = document.getElementById('select').value;
if (/* selection is valid */) {
// do whatever you need to do for a vaild selection
} else {
// selection is invalid, you want to notify user invalid
// selection by using "alert" or something like that, and
// you're DONE!
}
}
这样,如果选择无效,用户可以再次选择,并且一旦用户做出不同的选择,处理程序将再次运行。
相关文章:
- 使用返回函数sinde.attr()jquery元素
- 从自执行函数返回函数的Javascript性能命中率
- Node Express Handlebars帮助程序未返回函数的结果
- 未在Firefox中执行PageMethod的返回函数
- 对返回函数的函数感到困惑
- 从承诺返回不返回函数会导致警告
- 从函数返回函数而不调用返回的函数
- Javascript,闭包中的返回函数如何与外部函数连接
- 为什么Coderbyte.com's的Javascript模板喜欢返回函数的原始参数
- 对象函数返回函数而不是值
- 从外部函数(数组)了解返回函数(x)
- 从Javascript类对象返回函数
- 调用Typescript setter don't返回函数,尽管关联的getter可以工作
- 使用依赖注入在 JavaScript 中返回函数
- 通过单击JSP和javascript加载两个返回函数
- 需要说明:无法理解返回函数的javascript
- 简单的onClick返回函数不起作用
- 为什么这个闭包返回函数
- JS函数返回函数供以后使用-未定义参数
- Coffeescription类中的方法返回函数而不是字符串