【问题标题】:Password validation is at least 6 character密码验证至少为 6 个字符
【发布时间】:2017-02-06 00:57:31
【问题描述】:

我为密码和确认密码编写了一些验证代码来检查它们是否匹配。此外,还有一个条件是检查我的密码长度是否小于 6 个字符,如果小于 6 个字符,则写入/显示错误。但是我的代码不能正常工作:当我切换到字段 2 时,不会检查字段 1 的条件,如果两个条件都正确,错误仍然存​​在。

这是我的代码:

function checkPass()
{
    var pass1 = document.getElementById('pass1');
    var pass2 = document.getElementById('pass2');
    var message = document.getElementById('error-nwl');
    var goodColor = "#66cc66";
    var badColor = "#ff6666";

    if(pass1.value == pass2.value){
        pass2.style.backgroundColor = goodColor;
        message.style.color = goodColor;
        message.innerHTML = "ok!"
    }
    else{
        pass2.style.backgroundColor = badColor;
        message.style.color = badColor;
        message.innerHTML = " These passwords don't match"
    }
	
    if(pass1.length > 5){
        pass1.style.backgroundColor = goodColor;
        message.style.color = goodColor;
        message.innerHTML = "character number ok!"
    }
    else{
        pass1.style.backgroundColor = badColor;
        message.style.color = badColor;
        message.innerHTML = " you have to enter at least 6 digit!"
    }
}  
         <input name="password" type="password" placeholder="password"  id="pass1"/>
         <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass(); return false;" />
                  <div id="error-nwl"></div>
        

【问题讨论】:

  • 您能否描述“无法正常工作” - 缺少什么行为?
  • 您在 pass1.length 中缺少“值”,其他元素也更改为 pass1.value.length :)
  • 我觉得这个问题有两个赞成票有点奇怪。它不是,但它的格式或呈现不佳。此外,即使是这样,它所描述的错误也是非常基本的并且非常局限于此代码,因此我认为它一般没有用。
  • @Theraot 条件不能一起工作。我的意思是当我切换到字段 2 时,字段 1 的条件不检查,如果两个条件都正确,错误仍然存​​在
  • @inaz 好的,尽管您应该编辑问题并将其添加到那里。

标签: javascript jquery css validation


【解决方案1】:

使用下面的代码。 首先pass1.length 不正确。你应该写pass1.value.length其次,我在最后添加了比较两个块,因为首先你应该检查第一个块的长度。此外,该函数也应在第一个块的更改时调用。

祝你好运!

function checkPass()
{
    var pass1 = document.getElementById('pass1');
    var pass2 = document.getElementById('pass2');
    var message = document.getElementById('error-nwl');
    var goodColor = "#66cc66";
    var badColor = "#ff6666";
 	
    if(pass1.value.length > 5)
    {
        pass1.style.backgroundColor = goodColor;
        message.style.color = goodColor;
        message.innerHTML = "character number ok!"
    }
    else
    {
        pass1.style.backgroundColor = badColor;
        message.style.color = badColor;
        message.innerHTML = " you have to enter at least 6 digit!"
        return;
    }
  
    if(pass1.value == pass2.value)
    {
        pass2.style.backgroundColor = goodColor;
        message.style.color = goodColor;
        message.innerHTML = "ok!"
    }
	else
    {
        pass2.style.backgroundColor = badColor;
        message.style.color = badColor;
        message.innerHTML = " These passwords don't match"
    }
}  
<input name="password" type="password" placeholder="password"  id="pass1" onkeyup="checkPass(); return false;" />
<input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass(); return false;" />
<div id="error-nwl"></div>
        

【讨论】:

    【解决方案2】:

    试试这个:

    if(pass1.value.length > 5)
    

    【讨论】:

    • 当我切换到字段 2 时,字段 1 的条件不检查,如果两个条件都正确,错误仍然存​​在
    • 您需要进行一些认真的重构,请参阅 Vural Acar 的回答。
    • 我认为“试试这个:”和小代码 sn-p 不是一个有用的答案。
    【解决方案3】:

    之前:

     if(pass1.length > 5)
    

    之后:

     if(pass1.value.length > 5)
    

    你应该在一切都合适后检查相等性,比如长度或允许的字符等。

    function checkPass()
    {
        var pass1 = document.getElementById('pass1');
        var pass2 = document.getElementById('pass2');
        var message = document.getElementById('error-nwl');
        var goodColor = "#66cc66";
        var badColor = "#ff6666";
    
        if(pass1.value.length > 5 && pass2.value.length > 5)
        {
            pass1.style.backgroundColor = goodColor;
            message.style.color = goodColor;
            message.innerHTML = "character number ok!"
    
            if(pass1.value == pass2.value)
            {
                pass2.style.backgroundColor = goodColor;
                message.style.color = goodColor;
                message.innerHTML = "ok!"
            }
            else
            {
                pass2.style.backgroundColor = badColor;
                message.style.color = badColor;
                message.innerHTML = " These passwords don't match"
            }
        }
        else
        {
            pass1.style.backgroundColor = badColor;
            message.style.color = badColor;
            message.innerHTML = " you have to enter at least 6 digit!"
        }
    
    }
    <input name="password" type="password" placeholder="password"  id="pass1"/>
    <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass(); return false;" />
    <div id="error-nwl"></div>

    【讨论】:

    • 有没有办法验证第一个字段中的密码长度。然后显示那个时候的错误?
    【解决方案4】:
    if (pass1.value.length > 5)
    

    确保不要应用 trim(),因为 trim 会删除空格,并且密码中的空格不是有效字符。

    【讨论】:

    • 没有。他可以应用修剪来防止用户在输入值之前和之后放置空格。想象一下,如果用户输入 6 个空格的值。它将是有效的,这不是密码的工作方式。如果您在不修改密码的情况下找到了一个著名的网站。用链接在此处标记我。
    • 在插入 DB 时,他应该应用修剪,但他使用了单词验证,然后如果用户输入空格,那么应该对空格进行验证,空格也会增加 UI 文本框中的字符数。
    • 预防胜于治疗。那么,如果您可以在客户端进行验证,为什么还要浪费用户时间呢?和。另外,他还应该在服务器端进行验证以提高安全性。有时,客户端脚本无法加载。
    • 好的,假设用户在文本框中输入这样的“密码”空格,并且没有抛出验证警报,你修剪密码并插入数据库,现在用户正在尝试使用“密码”登录,现在谁让他知道你删除了他的空白。请记住,在编码时请记住一件事“最终用户什么都不知道”
    【解决方案5】:

    当您检查 pass1 的长度时,您实际上并没有检查它的值 - pass1.length &gt; 5 - 您应该将其更改为 pass1.value.length &gt; 5

    【讨论】:

    • 当我切换到字段 2 时,字段 1 的条件不检查,如果两个条件都正确,错误仍然存​​在。
    【解决方案6】:

    你可以这样做:

    if (pass1.value.trim().length > 5)
    

    【讨论】:

      【解决方案7】:

      要检查长度,你应该这样写

      if (pass1.value.length > 5)
      

      然后你的代码就可以正常工作了

      【讨论】:

        【解决方案8】:

        您可以利用正则表达式为您进行验证。 例如:我允许此密码中包含一些特殊字符,并且计数大于 6

        regex = pass1.value.search(/^[a-zA-Z0-9+&@#/%?=~_|!:,.;]{6,}+$/);
        
        if(regex){
            message.innerHTML="Invalid Password.";
        }else{
            message.innerHTML = " you have to enter at least 6 digit!";
        }
        

        【讨论】:

          【解决方案9】:

          function checkPass()
          {
              var pass1 = document.getElementById('pass1');
              var pass2 = document.getElementById('pass2');
              var message = document.getElementById('error-nwl');
              var goodColor = "#66cc66";
              var badColor = "#ff6666";
              if(pass1.value == pass2.value){
                  pass2.style.backgroundColor = goodColor;
                  message.style.color = goodColor;
                  message.innerHTML = "ok!"
              }
          	else{
                  pass2.style.backgroundColor = badColor;
                  message.style.color = badColor;
                  message.innerHTML = " These passwords don't match"
              }
          	
          	if(pass1.value.length > 5){
          		pass1.style.backgroundColor = goodColor;
          		message.style.color = goodColor;
          		message.innerHTML = "character number ok!"
          		}
          		else{
                  pass1.style.backgroundColor = badColor;
                  message.style.color = badColor;
                  message.innerHTML = " you have to enter at least 6 digit!"
              }
          	
          }  
          <input name="password" type="password" placeholder="password"  id="pass1"/>
                   <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass(); return false;" />
                            <div id="error-nwl"></div>

          【讨论】:

            【解决方案10】:

            密码验证这一看似简单的任务可能会变得复杂,并且可能难以确定代码无法按预期工作的原因。挑战的主要部分在于指定条件逻辑,然后将此逻辑转换为工作代码。

            您想要实现以下目标:

            1. 让用户输入至少 6 个字符长度的密码
            2. 让用户确认密码
            3. 为用户提供相关反馈,帮助用户完成整个过程

            将其转换为条件逻辑(在伪代码中)的一种方法如下:

            if (password length is less than 6)
              inform user that password should be at least 6 characters
            else if (passwords do not match)
              ask user to confirm password
            else
              inform user that passwords match, all is ok
            

            但是我的代码不能正常工作:当我切换到字段 2 时,字段 1 的条件没有被检查,如果两个条件都正确,错误仍然存​​在。

            您的代码遵循不同的逻辑(伪代码):

            if (passwords match)
              inform user that passwords match, all is ok
            else
              inform user that passwords do not match
            
            if (password is more than 5 characters)
              inform user that the password is long enough
            else
              inform user that the password should be at least 6 characters
            

            您的代码中的一个问题是密码长度是您检查的最后一件事,因此第一次 if/else 检查是多余的(它永远不会产生任何相关的反馈,即使密码匹配),因为您的代码总是会结束提供有关密码长度的反馈。

            另一个问题是你的代码会接受匹配的密码,即使它们少于 6 个字符,这就是为什么你要先检查密码长度,然后检查两个密码是否匹配。

            此外,您的代码仅在用户写入字段 2 ('#pass2') 时运行这些检查,您还需要向字段 1 的 'onkeyup' 添加事件处理程序。

            因此,您的代码逻辑需要重写。这是可以做到这一点的几种方法之一:

            function checkPass() {
              var neutralColor = '#fff'; // 'white';
              var badColor     = '#f66'; // 'red';
              var goodColor    = '#6f6'; // 'green';
              
              var password1 = getElm('pass1').value;
              var password2 = getElm('pass2').value;
            
              //if password length is less than 6
              if (password1.length < 6) {
                feedback('Enter a password of at least 6 characters');
                //we do not care about pass2 when pass1 is too short
                setBGColor('pass2', neutralColor);
                //if pass1 is blank, set neutral background
                if (password1.length === 0) {
                  setBGColor('pass1', neutralColor);
                } else {
                  setBGColor('pass1', badColor);
                }
              //else if passwords do not match
              } else if (password2 !== password1) {
                //we now know that pass1 is long enough
                feedback('Confirm password');
                setBGColor('pass1', goodColor);
                //if pass2 is blank, set neutral background
                if (password2.length === 0) {
                  setBGColor('pass2', neutralColor);
                } else {
                  setBGColor('pass2', badColor);
                }
              //else all is well
              } else {
                feedback('Passwords match');
                setBGColor('pass1', goodColor);
                setBGColor('pass2', goodColor);
              }
            }
            
            //helper function for document.getElementById()
            function getElm(id) {
              return document.getElementById(id);
            }
            
            //helper function for setting background color
            function setBGColor(id, value) {
              getElm(id).style.backgroundColor = value;
            }
            
            //helper function for feedback message
            function feedback(msg) {
              getElm('error-nwl').innerHTML = msg;
            }
            <input name="password" type="password" placeholder="password"  id="pass1" onkeyup="checkPass()"/>
            <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass()" />
            <div id="error-nwl">Enter a password of at least 6 characters</div>

            【讨论】:

              【解决方案11】:

              使用下面的代码

              valid=pass1.value.search(/^[A-Za-z0-9@_]{6,20}$/);
              
              if(valid != 0){
                  message.innerHTML="Invalid Password.";
              }else if(pass1.value.length < 6){
                    message.innerHTML = " you have to enter at least 6 digit!"
              }
              

              【讨论】:

              • 我认为“使用下面的代码”不是合适的答案。
              【解决方案12】:

              找到已完成更改的添加评论,因为它现在工作正常。

              function checkPass()
              {
                  var pass1 = document.getElementById('pass1');
                  var pass2 = document.getElementById('pass2');
                  var message = document.getElementById('error-nwl');
                  var goodColor = "#66cc66";
                  var badColor = "#ff6666";
                  if(pass1.value == pass2.value){
                      pass2.style.backgroundColor = goodColor;
                      message.style.color = goodColor;
                      message.innerHTML = "ok!"
                  }
              	else{
                      pass2.style.backgroundColor = badColor;
                      message.style.color = badColor;
                      message.innerHTML = " These passwords don't match"
                  }
              	
              	if(pass1.value.length > 5){           ////////just added value here//
              		pass1.style.backgroundColor = goodColor;
              		message.style.color = goodColor;
              		message.innerHTML = "character number ok!"
              		}
              		else{
                      pass1.style.backgroundColor = badColor;
                      message.style.color = badColor;
                      message.innerHTML = " you have to enter at least 6 digit!"
                  }
              	
              }
              <input name="password" type="password" placeholder="password"  id="pass1"/>
                       <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass(); return false;" />
                                <div id="error-nwl"></div>

              【讨论】:

                【解决方案13】:

                您的问题是检查单个 DOM 节点的长度,而不是 DOM 节点值的长度。

                你目前拥有的相当于

                var pass1 = document.getElementById('pass1');
                
                if ( pass1.length > 5 ) {...
                

                单个 DOM 节点的长度只有1,如果找到,它永远不会超过5
                你想要的是检查值的长度

                var pass1 = document.getElementById('pass1');
                
                if ( pass1.value.length > 5 ) {...
                

                但您确实希望在输入第一个密码字段而不是第二个密码字段时这样做。

                使用适当的事件处理程序、更好的检查和消息类,这将是实现它的方法

                var pass1   = document.getElementById('pass1');
                var pass2   = document.getElementById('pass2');
                var message = document.getElementById('error-nwl');
                
                function msg(_msg, good, time) {
                    message.innerHTML = _msg;
                    message.classList.toggle('bad', !good);
                    message.classList.add('visible');
                    setTimeout(function() {message.classList.remove('visible')}, time);
                }
                
                pass1.addEventListener('input', function() {
                    this.classList.remove('bad');
                    this.classList.remove('good');
                    if (this.value.length > 5) {
                        this.classList.add('good');
                        msg("Character number ok!", true, 1800);
                    }
                });
                
                pass1.addEventListener('blur', function() {
                    if (this.value.length <= 5) {
                        this.classList.remove('good');
                        this.classList.add('bad');
                        msg("You have to enter at least 6 digit!", false, 1800);
                    } else if (pass1.value !== pass2.value) {
                    	pass2.classList.remove('good');
                        pass2.classList.add('bad');
                        msg("Passwords don't match", false, 3000);
                    }
                });
                
                pass2.addEventListener('input', function() {
                    if (this.value.length > 5) {
                        var matches  = pass1.value === pass2.value;
                        var _message = matches ? "Passwords match!" : "Passwords don't match";
                        pass2.classList.toggle('good', matches);
                        pass2.classList.toggle('bad', !matches);
                        msg(_message, matches, 3000);
                    } else {
                        message.classList.remove('visible');
                        this.classList.remove('good');
                        this.classList.remove('bad');
                    }
                });
                
                pass2.addEventListener('blur', function() {
                    var matches  = pass1.value === pass2.value;
                    if (!matches) {
                        pass2.classList.remove('good');
                        pass2.classList.add('bad');
                        msg("Passwords don't match", matches, 3000);
                    }
                });
                #pass1.bad,
                #pass2.bad {
                  background: #ff6666;
                }
                #pass1.good,
                #pass2.good {
                  background: #66cc66;
                }
                #error-nwl {
                  opacity: 0;
                  color: #66cc66;
                  transition: opacity 0.3s ease-in-out;
                }
                #error-nwl.bad {
                  color: #ff6666;
                }
                #error-nwl.visible {
                  opacity: 1;
                }
                <input name="password" type="password" placeholder="password" id="pass1" />
                <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" />
                <div id="error-nwl"></div>

                【讨论】:

                  【解决方案14】:

                  您似乎有一些事情要做。

                  1. 密码长度必须至少为 6 个字符,否则会显示消息“您必须输入至少 6 个数字!”以红色显示。
                  2. 重新输入必须与密码匹配,否则会显示红色消息“这些密码不匹配”。
                  3. 如果“Both”条件通过,则显示绿色消息“ok!”。 (我的猜测)。
                  4. 如果字段为空,则没有特殊颜色。 (我的猜测。)
                  5. 如果密码有效但重新输入为空,则显示绿色消息“字符号正常!” (再次,我的猜测)。

                  我的建议,

                  • 如果您要在 pass2 上使用 onkeyup,那么为什么不在 pass1 中做同样的事情呢?
                  • 考虑使用 onfocusout 事件而不是 onkeyup。

                  以下代码应该可以满足您的需求。

                  function checkPass() {
                    var getTag = Id => document.getElementById(Id);
                    var pass1 = getTag('pass1');
                    var pass2 = getTag('pass2');
                    var message = getTag('error-nwl');
                    var str;
                  
                    //Logic that handles Password.
                    if (!pass1.value)
                      pass1.removeAttribute('valid');
                    else if (pass1.value.length < 6) {
                      pass1.setAttribute('valid', false)
                      str = " you have to enter at least 6 digit!";
                    } else {
                      if (!pass2.value)
                        str=" character number ok!";
                      pass1.setAttribute('valid', true);}
                  
                    //Logic that handles Retype.
                    if (!pass2.value)
                      pass2.removeAttribute('valid');
                    else if (pass1.value != pass2.value) {
                      pass2.setAttribute('valid', false);
                      str = " These passwords don't match";
                    } else
                      pass2.setAttribute('valid', true);
                  
                    
                    //Logic that handles the display of message.
                    message.removeAttribute('valid');
                    if (pass1.value && pass2.value && !str) {
                      message.setAttribute('valid', true);
                      message.innerHTML = "ok!"
                    } else if (str) {
                      message.innerHTML = str;
                    } else
                      message.innerHTML = '';
                    return !!message.valid;
                  
                  }
                  #pass1[valid=true] {
                    background: #66cc66
                  }
                  #pass1[valid=false] {
                    background: #ff6666
                  }
                  #pass2[valid=true] {
                    background: #66cc66
                  }
                  #pass2[valid=false] {
                    background: #ff6666
                  }
                  #error-nwl {
                    color: #ff6666
                  }
                  #error-nwl[valid=true] {
                    color: #66cc66
                  }
                  <input name="password" type="password" placeholder="password" id="pass1" onkeyup="checkPass()" />
                  <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass()" />
                  <div id="error-nwl"></div>

                  【讨论】:

                    【解决方案15】:

                    构建表单验证

                    何时验证?

                    首先,我们要验证三个地方:

                    • 在用户提交时验证表单。
                    • 在用户编辑字段时验证字段。
                    • 在服务器收到数据时验证数据。

                    我们需要在服务器端验证数据的原因(不管其他两个验证有多好)是因为恶意用户可以访问 HTML 和 JavaScript 代码、伪造请求或通过以下方式绕过客户端验证其他方式。

                    如果验证将发生在服务器端,为什么我们需要客户端验证?简短的回答是客户端验证减少了错误提交的数量,从而减少了流量。第二个动机是客户端验证允许更快、更轻松地向用户提供反馈。

                    话虽如此,当前的帖子只会处理客户端验证。

                    现在,为了运行验证代码,我们需要处理适当的事件。在 JavaScript 中添加事件处理程序的推荐方法是在目标元素上调用 addEventListener。遗憾的是 browser support 在旧版本的 Internet Explorer 上并不好。

                    所以,我们将从You Might Not Need jQuery 提取代码以添加事件处理程序:

                    function addEventListener(el, eventName, handler) {
                      if (el.addEventListener) {
                        el.addEventListener(eventName, handler);
                      } else {
                        el.attachEvent('on' + eventName, function(){
                          handler.call(el);
                        });
                      }
                    }
                    

                    注意:attachEvent 是 Microsoft 的专有扩展。


                    现在我们需要决定要处理的事件...

                    最初的诱惑是处理字段的每一个细微变化。这样做的缺点是,只需键入一个字符,系统可能会告诉用户它是错误的(因为值太短,或其他原因)。这可以解释为好像输入的单个字符是错误的,然后用户在继续之前停下来分析错误。

                    Luke Wroblewski, "Inline Validation in Web Forms", 2009 表明,使用“模糊”事件(失去焦点)进行验证会导致用户更快地填写表单。

                    以下是文章的摘录:

                    (...) 当简单的问题被标记为“正确”时,参与者会感到困惑,这一事实支持了这种解释:

                    “你是说我输入了一个有效的名字还是我的名字正确?”

                    “这是确认邮政编码格式正确还是我的邮政编码正确?”

                    这些类型的参与者问题在测试期间引起了一些小问题。我们的参与者知道我们无法知道他们的正确姓名或邮政编码,因此他们知道绿色复选标记并不意味着“正确”。但他们认为这意味着什么?他们不确定——这就是问题所在。由于不知道信息的含义,我们的参与者停下来向主持人提问,而不是自信地回答非常简单的问题。

                    (...)

                    当多个参与者在尝试回答问题时注意到错误消息时,他们在输入字段中输入了一个额外的字符,而不是等待消息更新。如果更新的消息继续显示错误,他们输入另一个字符,然后等待验证消息再次更新,依此类推,导致平均完成时间更长。

                    (...)

                    “令人沮丧的是,在 [the field] 向你闪烁之前,你没有机会在 [the field] 中投入任何东西。”

                    “当我单击名字字段时,它立即出现说 [我的名字] 太短。嗯,当然是!我还没开始呢!”

                    “当你没有完成打字时,我发现红十字会出现很烦人。这真的很让人分心。”

                    因此,最初的建议是使用blur 事件进行验证。

                    然而,这带来了另一个问题。如果仅在 blur 上进行验证,则当字段的状态设置为无效时,对其进行编辑将继续将其显示为无效 - 直到用户离开该字段。这可能会导致用户怀疑他们输入的内容是否仍然错误,而在他们离开该字段之前不会进行验证。

                    为防止出现该问题,我们将为每个字段设置以下状态:

                    • 空。这是该领域的原始状态。不要开始将所有内容都显示为无效。
                    • 正在验证。用户正在键入或编辑该字段。它既无效也不无效。
                    • 有效。用户在该字段中输入了有效输入。
                    • 无效。用户在字段中输入了无效输入。

                    这导致以下状态图:

                    使用yUML 创建的图表。

                    注意:出于实际目的,EmptyValidating 可以被认为是等效的。在这两种状态下,都不会向用户显示验证状态。此外,当用户重置表单时,应该可以返回到Empty 状态(如果给出了这样的选项)。

                    那么我们有以下内容:

                    注意:您可能会考虑的另一件事是使用timer 开始验证,以在inputchangekeyup 事件的某个间隔后运行一次。要正确执行此操作,每次运行其中一个事件时都必须重置此计时器。它是容易出错的代码,价值不大。


                    在哪里验证?

                    HTML5 已经为data form validation 添加了多种方式。然而,browser support 并不是最好的。这意味着即使我们选择扩展 HTML5 验证,它也可能无法工作,具体取决于浏览器。

                    因此,我们将跳过 HTML5 验证,然后继续添加我们的事件:

                    function setupValidation(form)
                    {
                        addEventHandler(form, 'submit', submitHandler);
                        var elementIndex = form.elements.length;
                        while (elementIndex--)
                        {
                            addEventHandler (form.elements[elementIndex], 'reset', resetHandler);
                            addEventHandler (form.elements[elementIndex], 'input', validatingHandler);
                            addEventHandler (form.elements[elementIndex], 'change', validatingHandler);
                            addEventHandler (form.elements[elementIndex], 'keyup', validatingHandler);
                            addEventHandler (form.elements[elementIndex], 'blur', validateHandler);
                        }
                    }
                    

                    现在,鉴于我们只构建表单验证,而不是表单验证框架或库......我们可以只获取表单元素和字段来放置我们想要的任何验证。如果我们这样做,那么表单不需要是参数。

                    为了让我们的代码在页面加载时运行,我们可以从 You Might Not Need jQuery 获取另一个 sn-p:

                    function ready(fn) {
                      if (document.readyState != 'loading'){
                        fn();
                      } else if (document.addEventListener) {
                        document.addEventListener('DOMContentLoaded', fn);
                      } else {
                        document.attachEvent('onreadystatechange', function() {
                          if (document.readyState != 'loading')
                            fn();
                        });
                      }
                    }
                    

                    现在,我们需要能够存储字段的状态。这可以通过元素对象的自定义属性、属性或类来完成。使用类来标记验证也有助于表单的呈现。

                    在验证表单 (submitHandler) 时,您必须决定是要依赖存储的字段验证还是再次验证。如果您对依赖于其他字段的字段进行验证,您可能希望将该验证标记为旧的,这样表单验证代码将知道再次运行验证。无论哪种方式,都将通过遍历每个字段来完成验证。

                    根据resetHandlervalidatingHandler 的想法是删除validinvalid 状态,出于前面解释的用户体验原因。

                    如果操作正确,就不应该出现向用户发出错误信号的情况。也就是说,代码不应该在字段有效时将其显示为无效;两者都不应在字段无效时将其显示为有效。


                    您可能想要禁用 HTML5 验证。这可以通过将novalidate 属性添加到表单来完成。也可以像这样通过 JavaScript 完成:

                    form.setAttribute('novalidate', 'novalidate');
                    

                    您可能还想查看字段的属性willValidate

                    如果你想使用 HTML5 验证,可以使用函数checkValidity

                    延伸阅读:Client-Side Form Validation with HTML5HTML5 Forms: JavaScript and the Constraint Validation API

                    另外,文章Constraint Validation: Native Client Side Validation for Web Forms 作者 TJ VanToll 有很好的 HTML5 验证示例。


                    如果我们要构建一个完整的表单验证库,我们会遇到读取 HTML5 验证属性并模仿它们的行为以便为旧浏览器提供它的麻烦。我们还必须担心如何指定 HTML5 不提供的其他验证规则(例如检查两个字段是否匹配),而不必为每种情况调整 JavaScript 代码(因为,正如我所说,如果我们正在制作图书馆)。


                    在哪里放置反馈

                    可用性建议是内联反馈。即在字段旁边添加内联元素,并将反馈作为文本。然后你可以使用 CSS 或 JavaScript 让它看起来很花哨。

                    这个建议的原因是依赖屏幕阅读器的人会在正确的位置获得反馈。此外,即使 CSS 被禁用或无法加载,它也将继续有意义。

                    这几乎就是您使用span 元素所做的事情。每个字段都需要一个。也许整个表单的一个是您想要放置一些与任何字段直接关联的消息。


                    注意:在读取某个字段的值时,我们通常使用field.value。该值的长度为field.value.length。然而应该注意的是,根据输入的类型,读取值的方式会发生变化。对于radiocheckbox,请使用field.checked。对于select,您需要field.options(应特别注意可以有多个值的select 字段)。最后imagereset、'button' 和submit 没有要检查的值。


                    太多、太复杂?

                    您不必这样做!其他人以前做过,您可以从他们那里获取代码! 哇哈哈!

                    这将通过使用诸如validate.js 或我自己的thoth.js 之类的开源库来完成。其他答案建议其他库。

                    您应该可以find more atlernatives。我不会假装列出详尽的清单。

                    重用代码被认为是一种很好的做法。您也可以选择研究此类库的代码以了解它们的工作原理。


                    旧答案

                    我将首先在您的代码中添加 cmets:

                    function checkPass()
                    {
                        var pass1 = document.getElementById('pass1');
                        var pass2 = document.getElementById('pass2');
                        var message = document.getElementById('error-nwl');
                        var goodColor = "#66cc66";
                        var badColor = "#ff6666";
                        // You start by checking if they match
                        if(pass1.value == pass2.value){
                            pass2.style.backgroundColor = goodColor;
                            message.style.color = goodColor;
                            message.innerHTML = "ok!"
                        }else{
                            pass2.style.backgroundColor = badColor;
                            message.style.color = badColor;
                            message.innerHTML = " These passwords don't match"
                        }
                    	// And then that messages gets removed by the result of the length check
                        // Also, pass1.length is undefined
                        if(pass1.length > 5){
                            pass1.style.backgroundColor = goodColor;
                            message.style.color = goodColor;
                            message.innerHTML = "character number ok!"
                        }else{
                            pass1.style.backgroundColor = badColor;
                            message.style.color = badColor;
                            message.innerHTML = " you have to enter at least 6 digit!"
                        }
                    }
                             <input name="password" type="password" placeholder="password"  id="pass1"/>
                             <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass(); return false;" />
                                      <div id="error-nwl"></div>
                            

                    相反,您应该强调状态是有效的,除非另有验证:

                    function checkPass()
                    {
                        var pass1 = document.getElementById('pass1');
                        var pass2 = document.getElementById('pass2');
                        var message = document.getElementById('error-nwl');
                        var goodColor = "#66cc66";
                        var badColor = "#ff6666";
                        message.style.color = goodColor;
                        message.innerHTML = "ok!"
                    
                        if(pass1.value == pass2.value){
                            pass2.style.backgroundColor = goodColor;
                        }else{
                            pass2.style.backgroundColor = badColor;
                            message.style.color = badColor;
                            message.innerHTML = " These passwords don't match"
                        }
                        if(pass1.value.length > 5){
                            pass1.style.backgroundColor = goodColor;
                        }else{
                            pass1.style.backgroundColor = badColor;
                            message.style.color = badColor;
                            message.innerHTML = " you have to enter at least 6 digit!"
                        }
                    }
                             <input name="password" type="password" placeholder="password"  id="pass1"/>
                             <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass(); return false;" />
                                      <div id="error-nwl"></div>
                            

                    除此之外,请注意,如果您使两个字段匹配,然后编辑第一个字段,则消息不会消失。事实上,编辑第一个永远不会让消息消失,因为我们仍然只检查第二个。相反,您可以同时检查两者。

                    此外,使用 keyup 可能会令人讨厌和困惑,您可以考虑使用 onblur 来验证用户何时离开该字段(即该字段失去焦点时,也就是模糊)。

                    如果您想要更高级的东西,您可以使用 keyup 方法在用户键入时删除消息,甚至可以再次检查,但在每次击键时重置的计时器上...

                    或者您可以使用 HTML5 验证,为什么不呢?


                    我刚刚更新了我的 JavaScript 库 thoth 以支持最小长度验证。还发布了一个帮助库来简化表单验证 - 根据具体情况,它可能需要一些调整,特别是它不包含任何本地化机制。

                    使用 thoth,您可以按如下方式实现您的代码。注意:如果您想将它们添加到您的代码中,请下载这些库。

                    Thoth 将确保此验证在 IE8 或更高版本中有效,如果 javascript 不可用,它将降级为 HTML5 表单验证。请记住,客户端始终可以操作 Javascript 和 HTML 代码,因此请在服务器上重复您的验证。

                    .valid
                    {
                        color: #66cc66;
                    }
                    .invalid
                    {
                        color: #ff6666;
                    }
                    <!DOCTYPE html>
                    <head>
                    	<title>Demo</title>
                    	<script src="https://rawgit.com/theraot/thoth/master/thoth.js"></script>
                    	<script src="https://rawgit.com/theraot/thoth/master/form_helper.js"></script>
                    </head>
                    <form data-on-valid="document.getElementById('ok').style.display='';" data-on-invalid="document.getElementById('ok').style.display='none';" data-lacking="you have to enter at least 6 digit!" data-lacking-class="invalid">
                    <input name="password" type="password" placeholder="password" id="pass1" minlength="6" required="required"/>
                    <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" minlength="6" data-validate="match(@#pass1)" required="required"/>
                    </form>
                    <div id="ok" class="valid" style="display:none">ok!</div>

                    data-属性这里有不少,我给你分解一下:

                    • data-on-valid:表单验证正确时将运行的代码。
                    • data-on-invalid:表单未通过验证时将运行的代码。
                    • data-lacking:字符不足时使用的字符串格式。同样,data-remainingdata-excess 将分别在到达 maxlength 和文本超出 maxlength 之前有空间时工作。
                    • data-lacking-class:用于缺少消息的 css 类,类似 data-remaining-classdata-excess-class 存在。

                    以上是由帮助库form_helper.cs添加的。从库 thoth 中仅使用以下内容:

                    • data-validate:额外的验证。在这种情况下,它用于添加验证以验证两个字段是否匹配。

                    很抱歉缺少文档。

                    注意:data-on-validdata-on-invalid 不是正确的事件。

                    【讨论】:

                    • 谢谢你。但有一个问题。两个字段都是正确的长度和macth..现在我已经更改了第一个文件的文本。错误仍然可以!
                    • @inaz 因为您只检查第二个字段 - 我试图警告您这一点。
                    • 如何更改我的代码以验证这两个字段?我想检查两个文件
                    • @inaz 你只检查第二个字段的onkeyup,所以它只在用户编辑第二个字段时运行。您必须在第一个字段上做类似的事情。
                    • @inaz 我用我的图书馆的解决方案扩展了答案。如果我想正确完成 javascript 表单验证,这就是我使用的。
                    【解决方案16】:

                    如果你使用 jQuery,你可以使用这个jQuery Validation plugin

                    <!doctype html>
                    <html>
                        <head>
                            <meta charset="utf-8">
                            <title>Makes "field" required to be the same as #other</title>
                            <link rel="stylesheet" href="https://jqueryvalidation.org/files/demo/site-demos.css">
                        </head>
                        <body>
                            <form id="myform">
                                <label for="password">Password</label>
                                <input id="password" name="password" />
                                <br/>
                                <input type="submit" value="Validate!">
                            </form>
                            <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
                            <script src="https://cdn.jsdelivr.net/jquery.validation/1.15.0/jquery.validate.min.js"></script>
                            <script src="https://cdn.jsdelivr.net/jquery.validation/1.15.0/additional-methods.min.js"></script>
                            <script>
                                // just for the demos, avoids form submit
                                jQuery.validator.setDefaults({
                                    debug: true,
                                    success: "valid"
                                });
                                $( "#myform" ).validate({
                                    rules: {
                                        password: {
                                            minlength: 6,
                                            maxlength: 25, 
                                            required: true
                                        }
                                    }
                                });
                            </script>
                        </body>
                    </html>

                    【讨论】:

                      【解决方案17】:

                      function checkPassSize(field) {
                      	var pass = document.getElementById(field);
                      	var message = document.getElementById('error-nwl');
                      	var goodColor = "#66cc66";
                      	var badColor = "#ff6666";		
                      	if (pass.value && pass.value.length > 5) {
                      		pass.style.backgroundColor = goodColor;
                      		message.style.color = goodColor;
                      		message.innerHTML = "character number ok!"
                      		return true;
                      	} else {
                      		pass.style.backgroundColor = badColor;
                      		message.style.color = badColor;
                      		message.innerHTML = " you have to enter at least 6 digit!"
                      		return false;
                      	}
                      }
                      
                      function checkPass() {
                      	var pass1 = document.getElementById('pass1');
                      	var pass2 = document.getElementById('pass2');
                      	var message = document.getElementById('error-nwl');
                      	var goodColor = "#66cc66";
                      	var badColor = "#ff6666";
                      	
                      	if(checkPassSize('pass1') && checkPassSize('pass2')){
                      		if (pass1.value == pass2.value) {
                      			pass2.style.backgroundColor = goodColor;
                      			message.style.color = goodColor;
                      			message.innerHTML = "ok!"
                      		} else {
                      			pass2.style.backgroundColor = badColor;
                      			message.style.color = badColor;
                      			message.innerHTML = " These passwords don't match"
                      		}
                      	}								
                      }
                      <input name="password" type="password" placeholder="password"
                      	id="pass1" onkeyup="checkPassSize('pass1');" />
                      <input name="repeatpassword" type="password"
                      	placeholder="confirm password" id="pass2"
                      	onkeyup="checkPass(); return false;" />
                      <div id="error-nwl"></div>

                      【讨论】:

                        【解决方案18】:

                        这是工作代码。将pass1.length 更改为pass1.value.length 并根据验证更新两个文本字段的颜色。

                        <html>
                        
                        <head>
                            <script>
                            function checkPass() {
                                var pass1 = document.getElementById('pass1');
                                var pass2 = document.getElementById('pass2');
                                var message = document.getElementById('error-nwl');
                                var goodColor = "#66cc66";
                                var badColor = "#ff6666";
                                if (pass1.value == pass2.value) {
                                    pass2.style.backgroundColor = goodColor;
                                    pass1.style.backgroundColor = goodColor;
                                    message.style.color = goodColor;
                                    message.innerHTML = "ok!"
                                } else {
                                    pass2.style.backgroundColor = badColor;
                                    message.style.color = badColor;
                                    message.innerHTML = " These passwords don't match"
                                }
                        
                                if (pass1.value.length > 5 && pass1.value == pass2.value) {
                                    pass1.style.backgroundColor = goodColor;
                                    pass2.style.backgroundColor = goodColor;
                                    message.style.color = goodColor;
                                    message.innerHTML = "character number ok!"
                                } else {
                                    pass1.style.backgroundColor = badColor;
                                    message.style.color = badColor;
                                    message.innerHTML = " you have to enter at least 6 digit!"
                                }
                        
                            }
                            </script>
                        
                        </head>
                        
                        <body>
                          <input name="password" type="password" placeholder="password" onkeyup="checkPass();" id="pass1" />
                          <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass();  return false;" />
                          <div id="error-nwl"></div>
                        </body>
                        </html>

                        【讨论】:

                          【解决方案19】:

                          此代码在键入时验证两个字段。

                          <!DOCTYPE html>
                          <html>
                          
                          <body>
                          
                              <input name="password" type="password" placeholder="password" id="pass1" onkeyup="setStyle(this,document.getElementById('pass2'));" />
                              <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="setStyle(this,document.getElementById('pass1'));" />
                              <div id="error-nwl"></div>
                          
                          
                              <script>
                                function isValidLength(element) {
                                    return (element.value.length > 5);
                                }
                          
                                function isEqual(element1, element2) {
                                    if (element1.value.length > 0 && element2.value.length > 0)
                                        return (element1.value == element2.value);
                                    return true;
                                }
                          
                                function setStyle(element, element2) {
                                    var message = document.getElementById('error-nwl');
                                    var goodColor = "#66cc66";
                                    var badColor = "#ff6666";
                                    var isValidPWD = isValidLength(element) && isEqual(element, element2);
                          
                                    if (isValidPWD) {
                                        if (isValidLength(element)) {
                                            element.style.backgroundColor = goodColor;
                                            message.style.color = goodColor;
                                            message.innerHTML = "character number ok!"
                                        }
                                        if (isEqual(element, element2)) {
                                            element.style.backgroundColor = goodColor;
                                            message.style.color = goodColor;
                                            message.innerHTML = "ok!"
                                        }
                                    } else {
                                        if (!isValidLength(element)) {
                                            element.style.backgroundColor = badColor;
                                            message.style.color = badColor;
                                            message.innerHTML = " you have to enter at least 6 digit!"
                                        }
                          
                                        if (!isEqual(element, element2)) {
                                            element.style.backgroundColor = badColor;
                                            message.style.color = badColor;
                                            message.innerHTML = " These passwords don't match"
                                        }
                                    }
                                }
                            </script>
                          
                          
                          </body>
                          
                          </html>

                          【讨论】:

                            【解决方案20】:

                            您可以将第二个if else 块移动到第一个if 并获得您可能想要的东西。您还需要将pass1.length 更改为pass1.value.length

                            我还认为您应该检查两个输入框的更改。如果您不这样做,用户可以切换回第一个输入框并在之后更改密码,并且检查状态不会更新。

                            这是更新后的代码。

                            function checkPass()
                            {
                                var pass1 = document.getElementById('pass1');
                                var pass2 = document.getElementById('pass2');
                                var message = document.getElementById('error-nwl');
                                var goodColor = "#66cc66";
                                var badColor = "#ff6666";
                            	
                                if(pass1.value.length > 5){
                                    pass1.style.backgroundColor = goodColor;
                                    message.style.color = goodColor;
                                    //message.innerHTML = "character number ok!"
                                    if(pass1.value == pass2.value) {
                                        pass2.style.backgroundColor = goodColor;
                                        message.style.color = goodColor;
                                        message.innerHTML = "Ok!"
                                    }
                                	else{
                                        pass2.style.backgroundColor = badColor;
                                        message.style.color = badColor;
                                        message.innerHTML = "These passwords don't match!"
                                    }
                                }
                                else{
                                    pass1.style.backgroundColor = badColor;
                                    message.style.color = badColor;
                                    message.innerHTML = "You have to enter at least 6 digits!"
                                }
                            }  
                            <input name="password" type="password" placeholder="password"  id="pass1" onkeyup="checkPass(); return false;"/>
                            <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass(); return false;" />
                            <div id="error-nwl"></div>
                                    

                            【讨论】:

                              【解决方案21】:

                              你可以使用validform.js。

                              例如:

                              <script type="text/javascript" src="http://validform.rjboy.cn/wp-content/themes/validform/js/jquery-1.6.2.min.js"></script>
                              <script type="text/javascript" src="http://validform.rjboy.cn/Validform/v5.1/Validform_v5.1_min.js"></script>
                              <script>
                              $(".demoform").Validform();
                              
                              </script>
                              <form class="demoform">
                              <input type="password" value="" name="userpassword" datatype="*6-15" errormsg="Password range between 6~15 bits!" />
                              <input type="password" value="" name="userpassword2" datatype="*" recheck="userpassword" errormsg="The account passwords you entered for the two time were not consistent." /></form>

                              【讨论】:

                                【解决方案22】:

                                试试这个!

                                function resetcol() 
                                {
                                    pass1.style = "";
                                    pass2.style = "";
                                
                                }
                                
                                function checkPass()
                                {
                                    var pass1 = document.getElementById('pass1');
                                    var pass2 = document.getElementById('pass2');
                                    var message = document.getElementById('error-nwl');
                                    var goodColor = "#66cc66";
                                    var badColor = "#ff6666";
                                    if (pass1.value == pass2.value && pass1.value.length > 5){
                                        pass2.style.backgroundColor = goodColor;
                                        message.style.color = goodColor;
                                        message.innerHTML = "ok!"
                                    }
                                	else{
                                        pass1.style = 
                                        message.style.color = badColor;
                                        message.innerHTML = "Bad input. your passwords must match, and be at least 6 characters long."
                                    }
                                	    	
                                }  
                                         <input name="password" type="password" placeholder="password"  id="pass1" onkeyup="resetcol();"/>
                                         <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="resetcol();" onchange="checkPass(); return false;" />
                                                  <div id="error-nwl"></div>
                                        
                                PS。由于 onchange 事件,您必须单击 pass2 字段! 如果有效,请投票!

                                【讨论】:

                                  【解决方案23】:

                                  最好在 DOM 加载后将事件侦听器分配给代码中的元素,这样您就可以省略对 getElementById 的多次调用,但无论如何这是您的代码已更正:

                                  var goodColor = "#66cc66", badColor = "#ff6666";
                                  
                                  function checkPass() {
                                    
                                    message = document.getElementById('error-nwl');
                                    pass1 = document.getElementById('pass1');
                                    pass2 = document.getElementById('pass2');
                                  
                                    if (pass1.value.length > 5) {
                                      pass1.style.backgroundColor = goodColor;
                                      message.style.color = goodColor;
                                      message.innerHTML = "character number ok!"
                                  
                                      if (pass2.value == pass1.value) {
                                        pass2.style.backgroundColor = goodColor;
                                        message.style.color = goodColor;
                                        message.innerHTML = "ok!"
                                      }
                                      else {
                                        pass2.style.backgroundColor = badColor;
                                        message.style.color = badColor;
                                        message.innerHTML = " These passwords don't match"
                                      }
                                  
                                    }
                                    else {
                                      pass1.style.backgroundColor = badColor;
                                      message.style.color = badColor;
                                      message.innerHTML = " you have to enter at least 6 digit!"
                                    }
                                  
                                  }  
                                  <input name="password" type="password" placeholder="password" id="pass1" onkeyup="checkPass()" />
                                  <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass()" />
                                  <div id="error-nwl"></div>

                                  【讨论】:

                                    【解决方案24】:

                                    您必须记住,事件的可能性和事件的顺序有很多。

                                    if(user>0 and user<5){//output username should be 6}
                                    if(pass>0 and pass<5){//output password should be 6}
                                    if(user>5 and pass>5){
                                        if(user==pass){//password match}
                                        else{//invalid password}
                                    }
                                    

                                    我已经修改了您的代码以解决问题

                                    function checkPass() {
                                      var pass1 = document.getElementById('pass1');
                                      var pass2 = document.getElementById('pass2');
                                      var message = document.getElementById('error-nwl');
                                      var goodColor = "#66cc66";
                                      var badColor = "#ff6666";
                                    
                                      if (pass1.value.length > 5) {
                                    
                                        pass1.style.backgroundColor = goodColor;
                                        message.style.color = goodColor;
                                        if (pass1.value == pass2.value) {
                                          pass1.style.backgroundColor = goodColor;
                                          pass2.style.backgroundColor = goodColor;
                                          message.style.color = goodColor;
                                          message.innerHTML = "ok!";
                                        } else {
                                          if (pass2.value.length > 0) {
                                            pass2.style.backgroundColor = badColor;
                                            message.style.color = badColor;
                                            message.innerHTML = " These passwords don't match";
                                          }
                                        }
                                      } else {
                                        if (pass1.value.length <= 5 && pass1.value.length > 0) {
                                          pass1.style.backgroundColor = badColor;
                                          message.style.color = badColor;
                                          message.innerHTML = " you have to enter at least 6 digit user!";
                                          if (pass2.value.length > 0) {
                                            pass2.style.backgroundColor = badColor;
                                            message.style.color = badColor;
                                          }
                                        }
                                        if (pass2.value.length <= 5 && pass2.value.length > 0) {
                                          pass2.style.backgroundColor = badColor;
                                          message.style.color = badColor;
                                          message.innerHTML = " you have to enter at least 6 digit pass!"
                                        }
                                      }
                                    
                                    }
                                    <html>
                                    
                                    <body>
                                      <input name="password" type="password" placeholder="password" onkeyup="checkPass();" id="pass1" />
                                      <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass();" />
                                      <div id="error-nwl"></div>
                                    </body>
                                    
                                    </html>

                                    这也可以通过在两个字段中调用 onkeyup 方法并编写不同的函数来验证字段来完成,这将确保更大的灵活性并且可以解决大多数情况。您可能还对添加其他事件(例如 onBlur)感兴趣,以测试用户何时转移焦点。

                                    希望这能回答你的问题

                                    【讨论】:

                                      【解决方案25】:

                                      您可以使用两个函数来完成这项工作。

                                      checkPass1() 检查密码是否足够长。 checkPass2() 检查这些密码是否匹配。如果有些用户可能先填写#pass2,我将checkPass2()添加到checkPass1()中。

                                      function checkPass1() 
                                      {
                                          var pass1 = document.getElementById('pass1');
                                          var message = document.getElementById('length-error');
                                          var goodColor = "#66cc66";
                                          var badColor = "#ff6666";
                                          var normalColor = "#ffffff"
                                          if (pass1.value.length <= 5)
                                          {
                                              pass1.style.backgroundColor = badColor;
                                              message.style.color = badColor;
                                              message.innerHTML = " you have to enter at least 6 digit!"
                                          }
                                          else
                                          {
                                              pass1.style.backgroundColor = normalColor;
                                              message.style.color = goodColor;
                                              message.innerHTML = " the length of password is long enough";
                                          }
                                          checkPass2();
                                      }
                                      function checkPass2()
                                      {
                                          var pass1 = document.getElementById('pass1');
                                          var pass2 = document.getElementById('pass2');
                                          var message = document.getElementById('confirm-error');
                                          var goodColor = "#66cc66";
                                          var badColor = "#ff6666";
                                          if(pass1.value == pass2.value)
                                          {
                                              pass2.style.backgroundColor = goodColor;
                                              message.style.color = goodColor;
                                              message.innerHTML = "ok!"
                                          }
                                          else
                                          {
                                              pass2.style.backgroundColor = badColor;
                                              message.style.color = badColor;
                                              message.innerHTML = " These passwords don't match"
                                          }
                                      }
                                      <input name="password" type="password" placeholder="password"  id="pass1" onkeyup="checkPass1()"/>
                                          <input name="repeatpassword" type="password" placeholder="confirm password" id="pass2" onkeyup="checkPass2()" />
                                          <div id="length-error"></div>
                                          <div id="confirm-error"></div>

                                      【讨论】:

                                      • 解释您的代码并提供更多细节可能会有所帮助。
                                      猜你喜欢
                                      • 2020-09-16
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2018-07-15
                                      • 2011-12-12
                                      • 2017-02-24
                                      • 1970-01-01
                                      • 2010-12-07
                                      • 2018-01-23
                                      相关资源
                                      最近更新 更多