为了账号安全,请及时绑定邮箱和手机立即绑定

关于元素失去焦点后输入验证的问题

关于元素失去焦点后输入验证的问题

慕斯王 2023-09-21 17:07:01
我开始学习 javascript,我正在尝试制作一个小项目来玩。我想验证用户名的输入字段是否仅包含字母(大写或小写),并且当值正确时,用颜色勾勒该字段的轮廓。(我不关心设计,我关心功能,因为它的目的是为了学习)。我有这个代码: https: //jsfiddle.net/7zcv4g1m/1/const userField = document.querySelector('#user .user');const passwordField = document.querySelector('#password .password');const regEx = /^[a-zA-Z]+$/g;function checkUser() {  // userField.setAttribute('class', 'user');  let userText = userField.value.substring(0, userField.value.length);  let expr = regEx.test(userText);  if (expr == true && userText.length > 0) {    userField.setAttribute('class', 'user test');  } else {    userField.setAttribute('class', 'user');  }}userField.addEventListener("focusout", checkUser, false);我的问题是这样的:第一次运行时,如果我单击该元素并输入正确的文本,当我将焦点移出该元素时,它会按预期概述输入。问题是当我在元素中单击返回并只需单击元素外部的某个位置即可触发焦点事件,而不修改文本中的任何内容。不知何故,我的正则表达式条件(代码中的 expr 变量)被认为是 false,而不是 true,并且它将元素的输出转回灰色而不是绿色。如果我在退出后单击返回,它会将输入边框恢复为绿色。我不明白为什么会发生这种情况以及我在哪里犯了错误。或者我可能代码写错了。如果有人能给我提示,我将不胜感激。
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

是由 引起的regEx.test(userText)。这应该有效:


function checkUser() {

  // userField.setAttribute('class', 'user');

  let userText = userField.value.substring(0, userField.value.length);

  let expr = userText.match(regEx);

  if (expr && userText.length > 0) {

    userField.setAttribute('class', 'user test');

  } else {

    userField.setAttribute('class', 'user');

  }

}


查看完整回答
反对 回复 2023-09-21
?
偶然的你

TA贡献1841条经验 获得超3个赞

删除正则表达式中的修饰符 g,如

const regEx = /^[a-zA-Z]+$/


查看完整回答
反对 回复 2023-09-21
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信