html利用JS实现账号暗码登录的简单案例

打印 上一主题 下一主题

主题 1918|帖子 1918|积分 5754

目次
案例需求
思路
错误案例及题目
修改思路
案例提供


所须要的组件
<input>标签,<button>标签,<script>标签
详情利用参考:HTML 教程 | 菜鸟教程
案例需求

编写一个程序,最多答应用户实验登录 3 次。
每次提示输入用户名和暗码(假设精确用户名为 `"admin"`,暗码为 `"123456"`),
如果输入错误凌驾 3 次则锁定账户。
思路

利用button按钮实现点击事件获取输入框获取的值举行条件判定是否满足登录要求实现登录功能
错误案例及题目

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8. <div>
  9.     账户名:<input type="text" id="username">
  10.     密码:<input type="password" id="password">
  11.     <button onclick="login()">登录</button>
  12.     <p id="output"></p>
  13. </div>
  14. <script>
  15.     // let count = 0;
  16.     function login() {
  17.         let username = document.getElementById('username').value;
  18.         let password = document.getElementById('password').value;
  19.         for(let  i = 0; i<3;i++){
  20.             
  21.             if(username === 'admin' && password === '123456'){
  22.                 document.getElementById('output').textContent = '登录成功';
  23.                 console.log(i)
  24.                 break;
  25.             }else{
  26.                 document.getElementById('output').textContent = '登录失败,请重新输入(剩余尝试次数:' + (3 - i) + ')';
  27.                
  28.             }
  29.             if (i === 2){
  30.                 document.getElementById('output').textContent = '密码错误已达3次,账户已锁定';
  31.             }
  32.             
  33.         }
  34.     }
  35. </script>
  36. </body>
  37. </html>
复制代码
应该有人像我一样看到案例需求的第一眼就会这么写,然后开始第一次运行
输入精确的,出现

等到输入错误的值的时间
不对,明明我只提交了一次,错误的话应该是输出重新输入,还剩余一次的的提示啊,为什么会直接进入第三次的锁定,导致想不明白。
为了一探究竟我们须要打印i的值来确定题目地点
于是将代码修改成如下图这样
  1. <script>
  2.     // let count = 0;
  3.     function login() {
  4.         let username = document.getElementById('username').value;
  5.         let password = document.getElementById('password').value;
  6.         for(let  i = 0; i<3;i++){
  7.             console.log(i)
  8.             if(username === 'admin' && password === '123456'){
  9.                 document.getElementById('output').textContent = '登录成功';
  10.                 console.log(i)
  11.                 break;
  12.             }else{
  13.                 document.getElementById('output').textContent = '登录失败,请重新输入(剩余尝试次数:' + (3 - i) + ')';
  14.                 console.log(i)
  15.             }
  16.             if (i === 2){
  17.                 document.getElementById('output').textContent = '密码错误已达3次,账户已锁定';
  18.             }
  19.             console.log(i)
  20.         }
  21.     }
  22. </script>
复制代码
运行提交

会清楚发现打印了多次重复结果。
原因是因为for()的循环体 ,当条件不满足包含break语句的if判定语句的时间,全部循环体都会实行,就导致了会直接运行到最后的结果,其实会提示重新输入的语句这一提示的,但是由于计算机的计算速度很快,会直接到最后的结果举行直接覆盖
JavaScript 的实行机制是事件驱动 + 单线程的,它遵照如下逻辑:

  • 用户点击按钮,触发 login() 函数;
  • 欣赏器立即实行 login() 中的全部代码,包罗 for 循环;
  • 循环内的全部迭代都会在一次点击中完成,不会等待用户再次输入;
  • 因此,纵然你盼望“每次点击只验证一次”,但循环的存在会导致“单次点击验证多次

 JavaScript 中的事件处置惩罚函数(如 onclick)是同步实行的,不会停息等待用户交互;如果想实现“多次实验”,应该依靠外部状态变量(如 attemptCount)而不是 循环体;
修改思路

知道了题目地点就给我们提供了修改思路
举行单次提交举行累加次数计算,也就是不利用循环体,举行条件判定
案例代码提供

  1. <script>
  2. let count = 0;
  3.     function login() {
  4.       let username = document.getElementById('username').value;
  5.       let password = document.getElementById('password').value;
  6.         if (count >= 3) {
  7.             document.getElementById('output').textContent = '账户已锁定,无法继续尝试';
  8.             return;
  9.         }
  10.         if (username === 'admin' && password === '123456') {
  11.             document.getElementById('output').textContent = '登录成功';
  12.         } else {
  13.             count++;
  14.         }
  15.             if (count === 3) {
  16.                 document.getElementById('output').textContent = '密码错误已达3次,账户已锁定';
  17.             } else {
  18.                 document.getElementById('output').textContent = '登录失败,请重新输入(剩余尝试次数:' + (3 - count) + ')';
  19.             }
  20.         }
  21. </script>
复制代码
运行结果:

到这里也就完成了该案例了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表