【问题标题】:JS Confirm MessageJS 确认消息
【发布时间】:2021-10-28 18:31:29
【问题描述】:

我是 JavaScript 新手,目前正在为一个项目创建密码生成器。我遇到了一个问题,当提示用户使用confirm 消息选择他们理想的密码标准时。如果他们没有选择至少一个选项,我想使用loop 函数将alert 消息返回到窗口。这是我目前所拥有的。

// function: when you click on generate button it prompts messages to select password criteria. 
var generateBtnPrompt = function () {
    var confirmNumber = confirm("Click 'OK' to generate numbers in your password");
    var confirmLowerCase = confirm("Click 'OK' to generate lowerCase characters in your password");
    var confirmUpperCase = confirm("Click 'OK' to generate upperCase characters in your password");
    var confirmSymbols = confirm("Click 'OK' to generate symbols characters in your password");
    //parseInt convert a string into an integer
    var charLength = parseInt(prompt("How many characters would you like your password to be? Please choose a number from (8-128)"));
};

【问题讨论】:

  • 让我看看我是否理解你想要做什么。 confirmNumber 为假,confirmLowerCase 为假,confirmUpperCase 为假,confirmSymbols 为假,charLength 为 0 提醒什么?
  • “我想用loop函数将alert消息返回到窗口”。循环函数的作用是什么?请澄清一下。
  • 新手提示:在避免全局变量的地方使用 ES6+ 语法。尽可能使用const,如果需要,使用let,完全跳过var。不要听仍然使用var 的老师或教程,这意味着它们在语言的其他领域也很可能已经过时了。
  • @j08691 抱歉让它看起来那样,但对这个领域很陌生并试图学习它,我尝试了几种解决方案,但它们(函数)不起作用,所以我删除了所有不相关的语法和保持到目前为止的工作!

标签: javascript loops alert confirm


【解决方案1】:

您可以使用Logical OR 运算符 (||) 来检查至少一个变量是否为真。

MDN 网络文档:
一组的逻辑 OR (||) 运算符(逻辑析取) 当且仅当它的一个或多个操作数为真时,操作数为 true

如果没有变量为真,则 recursion 重新运行函数。

像这样:

if (!(confirmNumber || confirmLowerCase || confirmUpperCase)) {
  alert("You need to pick at least one!");
  return generateBtnPrompt()
}

完整代码:

var generateBtnPrompt = function () {
    var confirmNumber = confirm("Click 'OK' to generate numbers in your password");
    var confirmLowerCase = confirm("Click 'OK' to generate lowerCase characters in your password");
    var confirmUpperCase = confirm("Click 'OK' to generate upperCase characters in your password");
    var confirmSymbols = confirm("Click 'OK' to generate symbols characters in your password");
    
    if (!(confirmNumber || confirmLowerCase || confirmUpperCase)) {
      alert("You need to pick at least one!");
      return generateBtnPrompt()
    }
    
    var charLength = parseInt(prompt("How many characters would you like your password to be? Please choose a number from (8-128)"));
};

generateBtnPrompt()

【讨论】:

  • 糟糕的递归使用。任何循环结构都将同样有效,而不会冒无限堆栈深度的风险。
  • @Tibrogargan IMO 递归比此示例中的循环更简洁易读。我不确定 OP 是否有可能拒绝 38612 个确认框以达到最大调用堆栈大小。
  • 一个测试框架会发现它微不足道。拥有不能保证完成的递归函数只是一种不好的做法。这正是为什么在大多数用例中建议使用基于堆栈的实现的原因。除此之外,您可能还想修复逻辑错误和范围问题。
猜你喜欢
  • 2012-01-13
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多