javascript - 使用 onblur 在字段下方显示和隐藏消息

标签 javascript

我有一个表单,如果用户在字段内单击然后又从中退出,我想显示一条错误消息。我有这段代码,它运行良好

<form action="sign_in.php" method="post" id="sign_in_form">
  <div class="form-group">
    <label for="email" style="font-weight: bold; cursor: text;"><span style="color:red;">* </span>Email Address</label>
    <input type="text" name="email_3" id="email_3" class="form-control form-control-lg" onblur="check();"
    value="" style="width:455px; background-color:#EEEEEE;">
  </div>
  <div id="errorname"></div>

<script>
function check(){
     if(document.getElementById('email_3').value=='' || !document.getElementById('email_3').value.length){
          document.getElementById('errorname').innerHTML="this is an invalid name";
      }
}
</script>

现在的问题是,如果我在该字段内再次单击,消息仍然可用。如果再次在内部单击,我需要删除消息,直到我在字段外部单击消息再次出现。我怎么能那样做?

最佳答案

使用focus事件清空错误元素

function check() {
  if (document.getElementById('email_3').value == '' || !document.getElementById('email_3').value.length) {
    document.getElementById('errorname').innerHTML = "this is an invalid name";
  }
}
function empty() {
    document.getElementById('errorname').innerHTML = "";
 
}
<form action="sign_in.php" method="post" id="sign_in_form">
  <div class="form-group">
    <label for="email" style="font-weight: bold; cursor: text;"><span style="color:red;">* </span>Email Address</label>
    <input type="text" name="email_3" id="email_3" class="form-control form-control-lg" onblur="check();" onfocus="empty()" value="" style="width:455px; background-color:#EEEEEE;">
  </div>
  <div id="errorname"></div>

更新:为了更容易多次使用 jquery

$(document).on('blur','.validate',function(){
  if(!$.trim($(this).val())){
    $(this).closest('.form-group').find('.errorname').show();
    $(this).addClass('error_show')
  }
}).on('focus','.validate',function(){
   $(this).closest('.form-group').find('.errorname').hide()
   $(this).removeClass('error_show')
})
.errorname{
 display:none;
}
.validate:hover,.validate:focus{
 border: 3px solid #EEA730
}
.error_show:hover{
 box-shadow: 0 0 0 3px #EEA730 !important;
 border:1px solid red !important;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="sign_in.php" method="post" id="sign_in_form">
  <div class="form-group">
    <label for="email" style="font-weight: bold; cursor: text;"><span style="color:red;">* </span>Email Address</label>
    <input type="text" name="email_3" id="email_3" class="form-control form-control-lg validate"  value="" style="width:455px; background-color:#EEEEEE;">
      <div class="errorname">error 1</div>
  </div>
  
 <div class="form-group">
    <label for="email" style="font-weight: bold; cursor: text;"><span style="color:red;">* </span>Email Address</label>
    <input type="text" name="email_3" id="email_3" class="form-control form-control-lg validate"  value="" style="width:455px; background-color:#EEEEEE;">
      <div class="errorname">error 2</div>
  </div>
  <div class="form-group">
    <label for="email" style="font-weight: bold; cursor: text;"><span style="color:red;">* </span>Email Address</label>
   <select name="email_3" id="email_3" class="form-control form-control-lg validate"  value="" style="width:455px; background-color:#EEEEEE;">
   <option></option>
    <option value="ss">one</option>
   </select>
      <div class="errorname">error 2</div>
  </div>

关于javascript - 使用 onblur 在字段下方显示和隐藏消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765454/

相关文章:

javascript - 在提交到服务器之前如何在 Fine Uploader 中获取图像的尺寸并验证它?

javascript - 2 个 JavaScript 事件按顺序触发 - 第 2 个被忽略

javascript - 在 highcharts 中切换到其他图表类型时如何停止重置缩放

javascript - 不要在 $location.hash 之后添加 hash 到 URL

javascript - 使用javascript获取文件输入?

javascript - 如何以声明方式创建自定义 HTML 元素?

javascript - 如果函数有参数则不起作用

javascript - Spring MVC - 为什么我的 GET 管理器方法显示 JavaScript 警报而不是重定向?

Javascript: "if"表单获取值为 "on"

javascript - 如何检测 iframe 何时已加载