【问题标题】:How to change focus color when input is filled in with required attribute javascript/html/css如何在输入填充必需属性 javascript/html/css 时更改焦点颜色
【发布时间】:2016-06-16 16:23:18
【问题描述】:

我正在处理 HTML 表单。我在一些输入字段中添加了必需的元素。因为我使用的是 Bootstrap,所以输入字段在聚焦时默认为蓝色。我已使用input:required:focus {border: 1px solid red;} 将所需的输入字段设置为红色。现在,当填写所需的输入字段时,我想将输入字段边框更改为绿色。我的问题,这是否可能与 CSS 以及如何?如果没有,我怎样才能用 Javascript 或其他东西来实现这一点?

input:required:focus {
  border: 1px solid red;
  outline: none;
}
textarea:required:focus {
  border: 1px solid red;
  outline: none;
}
.form-horizontal {
  padding-left: 15px;
  padding-right: 15px;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<form class="form-horizontal">

  <div class="form-group">
    <label class="col-md-2 control-label" for="Name">
      Full name <span class="required">*</span>
    </label>
    <div class="col-md-10">
      <input id="Name" name="Name" placeholder="Full name" class="form-control input-md" required="" type="text">
      <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="John Doe">Format</a></span>
    </div>
  </div>

  <div class="form-group">
    <label class="col-md-2 control-label" for="email">
      E-mail <span class="required">*</span>
    </label>
    <div class="col-md-10">
      <input id="email" name="email" placeholder="E-mail" class="form-control input-md" required="" type="email">
      <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="johndoe@gmail.com">Format</a></span>
    </div>
  </div>

  <div class="form-group">
    <label class="col-md-2 control-label" for="phone">
      Phone number
    </label>
    <div class="col-md-10">
      <input id="phone" name="phone" placeholder="Phone number" class="form-control input-md" type="text">
      <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="Only numbers">Format</a></span>
    </div>
  </div>

  <div class="form-group">
    <label class="col-md-2 control-label" for="question">
      Question <span class="required">*</span>
    </label>
    <div class="col-md-10">
      <textarea rows="20" cols="40" class="form-control" id="question" required="" name="question"></textarea>
    </div>
  </div>

  <div class="col-md-10 col-md-offset-2">
    <button type="submit" class="btn btn-default formbuttonalign">Send mail!</button>
  </div>
</form>

【问题讨论】:

    标签: javascript jquery html css twitter-bootstrap


    【解决方案1】:

    在必填字段上使用 oninput 事件,然后验证它是否填充。

    oninput="if(this.value != ''){ this.style.borderColor='green'; } else{ this.style.borderColor='red'; }"
    

    		  input:required:focus {
          border: 1px solid red;
          outline: none;
         }
    
         textarea:required:focus {
          border: 1px solid red;
          outline: none;
        }
                   <form class="form-horizontal">
    
                        <div class="form-group">
                            <label class="col-md-2 control-label" for="Name">Full name <span class="required">*</span></label>
                            <div class="col-md-10">
                                <input id="Name" name="Name" placeholder="Full name" class="form-control input-md" required="" type="text" oninput="if(this.value != ''){ this.style.borderColor='green'; } else{ this.style.borderColor='red'; }">
                                <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="John Doe">Format</a></span>
                            </div>
                        </div>
    
                        <div class="form-group">
                            <label class="col-md-2 control-label" for="email">E-mail <span class="required">*</span></label>
                            <div class="col-md-10">
                                <input id="email" name="email" placeholder="E-mail" class="form-control input-md" required="" type="email" oninput="if(this.value != ''){ this.style.borderColor='green'; } else{ this.style.borderColor='red'; }">
                                <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="johndoe@gmail.com">Format</a></span>
                            </div>
                        </div>
    
                        <div class="form-group">
                            <label class="col-md-2 control-label" for="phone">Phone number</label>
                            <div class="col-md-10">
                                <input id="phone" name="phone" placeholder="Phone number" class="form-control input-md" type="text">
                                <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="Only numbers">Format</a></span>
                            </div>
                        </div>
    
                        <div class="form-group">
                            <label class="col-md-2 control-label" for="question">Question <span class="required">*</span></label>
                            <div class="col-md-10">
                                <textarea rows="20" cols="40" class="form-control" id="question" required="" name="question" oninput="if(this.value != ''){ this.style.borderColor='green'; } else{ this.style.borderColor='red'; }"></textarea>
                            </div>
                        </div>
    
                        <div class="col-md-10 col-md-offset-2">
                        <button type="submit" class="btn btn-default formbuttonalign">Send mail!</button>
                        </div>
                </form>

    【讨论】:

    • 实现它的好方法。不幸的是,它不会像required 属性那样检查电子邮件是否有效。因此,如果需要数字并指定为数字,它只会提交它们的数字,而不是文本。 js 代码只检查它是否已填写。我还找到了 HTML 5 的另一个选项,我将在几分钟后发布
    【解决方案2】:

    您希望它什么时候变绿?您立即开始输入,或者当输入字段失去焦点时?让我假设您希望在它失去焦点时发生这种情况。另一个问题是:当它失去焦点时是否应该保持绿色?我假设它会,因为我的第一个假设是它只会在失去焦点时变成绿色。如果我的任何假设是错误的,请纠正我

    Javascript:

    $(function(){
            $('input:required,textarea:required').on('blur', function(){
               if($(this).val()!==''){  //assuming the form doesn't have some fields populated by default.
                 $(this).addClass('green-border');
               } else {
                 $(this).removeClass('green-border');
               }
            });
      });
    .green-border {
      border: 1px solid green !important;  
    }
    
    input:required:focus {
      border: 1px solid red;
      outline: none;
    }
    
    textarea:required:focus {
      border: 1px solid red;
      outline: none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
    <form class="form-horizontal">
    
                    <div class="form-group">
                        <label class="col-md-2 control-label" for="Name">Full name <span class="required">*</span></label>
                        <div class="col-md-10">
                            <input id="Name" name="Name" placeholder="Full name" class="form-control input-md" required="" type="text">
                            <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="John Doe">Format</a></span>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <label class="col-md-2 control-label" for="email">E-mail <span class="required">*</span></label>
                        <div class="col-md-10">
                            <input id="email" name="email" placeholder="E-mail" class="form-control input-md" required="" type="email">
                            <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="johndoe@gmail.com">Format</a></span>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <label class="col-md-2 control-label" for="phone">Phone number</label>
                        <div class="col-md-10">
                            <input id="phone" name="phone" placeholder="Phone number" class="form-control input-md" type="text">
                            <span class="format-block"><a data-toggle="tooltip" data-placement="right" title="Only numbers">Format</a></span>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <label class="col-md-2 control-label" for="question">Question <span class="required">*</span></label>
                        <div class="col-md-10">
                            <textarea rows="20" cols="40" class="form-control" id="question" required="" name="question"></textarea>
                        </div>
                    </div>
    
                    <div class="col-md-10 col-md-offset-2">
                    <button type="submit" class="btn btn-default formbuttonalign">Send mail!</button>
                    </div>
            </form>

    【讨论】:

    • 这是一种方法,我想它会检查该字段是否为空,如果不是,它会变为绿色并保持绿色。不幸的是,它不会像required 属性那样检查它是否是有效的电子邮件。它非常有用,我可以肯定地使用它。我还发现了 HTML 5 的另一个选项,我将在几分钟后发布
    【解决方案3】:

    所以我发现 HTML5 包含一个 validinvalid 选择器。

      input:required:focus {
      border: 1px solid red;
      outline: none;
      }
    
     textarea:required:focus {
     border: 1px solid red;
     outline: none;
     }
    
    input:focus:valid {
    border: 1px solid green;
    outline: none;
    }
    
    input:focus:invalid {
    border: 1px solid red;
    outline: none;
    }
    
    
    input:valid {
    border: 1px solid green;
    }
    

    您可以将它与required 选择器结合使用来检查它是否有效,如果它被填写并且它是否正确,就像电话号码只包含数字一样。有趣的是它只有 HTML5 和 CSS3 :)

    【讨论】:

    • 我完全忘记了这个。我在我的一个 AngularJs 项目中使用了它。不错:)
    • 多么漂亮又简单的解决方案
    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2013-01-02
    相关资源
    最近更新 更多