javascript - 递归提示函数返回null

标签 javascript variables if-statement prompt

我想构建一个提示函数,它会提示直到用户输入一个值,然后返回该值。

当我进入强制模式然后输入一个值时,为什么此代码返回null?有人可以让它工作吗?

function UserInput(text, defaultText, mandantory) {
  if (typeof defaultText === 'undefined')
    defaultText = '';
  if (typeof mandantory === 'undefined')
    return prompt(text, defaultText);
  else {
    var a = prompt(text, defaultText);
    if (a === '') {
      return UserInput(text, defaultText, mandantory);
    } else {
      return null;   
    }
  }
}
<!DOCTYPE html>
<html>
	<head>
		<title>Page Title</title>
	</head>
	<body>
		<button onclick="alert(UserInput('prompt with input', ''))">prompt with input</button><br/>
		<button onclick="alert(UserInput('prompt with mandantory input', '', 0))">prompt with mandantory input</button>
	</body>
</html>

注意:必须从 onclick="..."调用它。

谢谢, 德扬

最佳答案

它正在返回null因为您将其返回到您的 else 中如果输入了一个值。在你的最后else您需要返回 a而不是null ,当 a'' 不同:

if (a === '') {
  return UserInput(text, defaultText, mandantory);
} else {
  return a;   
}

注意:

要检查变量是否已定义,您可以使用 if(mandatory)而不是写if(typeof mandantory === 'undefined') .

演示:

function UserInput(text, defaultText, mandantory) {
  if (typeof defaultText === 'undefined')
    defaultText = '';
  if (mandantory)
    return prompt(text, defaultText);
  else {
    var a = prompt(text, defaultText);
    if (a === '') {
      return UserInput(text, defaultText, mandantory);
    } else {
      return a;   
    }
  }
}
<!DOCTYPE html>
<html>
	<head>
		<title>Page Title</title>
	</head>
	<body>
		<button onclick="alert(UserInput('prompt with input', ''))">prompt with input</button><br/>
		<button onclick="alert(UserInput('prompt with mandantory input', '', 0))">prompt with mandantory input</button>
	</body>
</html>

关于javascript - 递归提示函数返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54022896/

相关文章:

javascript - 如何将日期转换为时间戳?

Javascript 快速变量不存在替代方案

c++ - 函数调用与局部变量

javascript - if条件不影响div的显示

JQuery if语句无法获取attr值

Java - 如果用户未输入内容,则生成随机用户名

javascript - 在运行功能之前选择单选按钮

javascript - JavaScript 中的正则表达式只允许带有可选 2 位小数的数字

javascript - 在 useEffect 钩子(Hook)中添加依赖导致死循环

r - 在多个变量 R 代码上创建新的变量条件