【问题标题】:The required attribute is not working in Chrome but does work in FireFoxrequired 属性在 Chrome 中不起作用,但在 FireFox 中起作用
【发布时间】:2021-03-26 17:06:51
【问题描述】:

我正在使用引导程序进行样式设置,但我没有定义任何自己的类。由于 FireFox 正在工作,我相信我使用的结构是正确的。但 Chrome 并不高兴,我对两者之间的细微差别了解得不够多,无法追踪。 “状态”下拉菜单的必需属性在两者中都不起作用,但我认为这是另一个问题。

我遇到了一篇文章,描述了当应用程序 url 为 ssl 时,Chrome 如何不会加载非 ssl 脚本,但这不应该适用,因为我正在使用 ng serve 并且我的 url 不安全。否则,所有与 required 属性相关的文章不起作用都与 FireFix 上的故障有关,这与我遇到的情况相反。

FireFox: 86.0.1 (64-bit)
Chrome:  89.0.4389.90 (Official Build) (64-bit)

来自组件 html

<div class="row">
  <div class="col-md-5 mb-3">
    <label for="{{idPrefix}}City">City</label>
    <input type="text" class="form-control" id="{{idPrefix}}City" placeholder="" required [(ngModel)]="model.City">
  </div>
  <div class="col-md-4 mb-3">
    <label for="{{idPrefix}}state">State</label>
    <select class="custom-select d-block w-100" id="{{idPrefix}}state" required [(ngModel)]="model.State">
      <option value="">Choose...</option>
      <option *ngFor="let State of StateArray" value="{{State.abbreviation}}">{{State.name}}</option>
    </select>
  </div>
  <div class="col-md-3 mb-3">
    <label for="{{idPrefix}}zip">Zip</label>
    <input type="text" class="form-control" id="{{idPrefix}}zip" placeholder="" required [(ngModel)]="model.Zip">
  </div>
</div>

index.html

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">

【问题讨论】:

  • 该属性有效,如果您尝试发布表单,它会告诉您缺少字段。 Firefox 中的红色框阴影是一种用户代理样式,而 Chrome 则没有。如果你想要它无处不在,你可以用:invalid 伪类编写你自己的。

标签: html google-chrome firefox required-field


【解决方案1】:

通常 chrome 不会为无效输入创建此红色边框。 您可以手动添加一些 css 来创建该边框:

input:required {
  border-color: #800000;
  border-width: 3px;
}

input:invalid {
  background-color: #ffdddd;
}

input:valid {
  background-color: #ddffdd;
}

但老实说,我真的不知道你会如何单独使用 bootsrap 来做到这一点。

【讨论】:

    【解决方案2】:

    检查下面的代码,它适用于所有浏览器

        <!doctype html>
    <html lang="en">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    
        <title>Test</title>
    </head>
    <body>
    <form class="needs-validation" novalidate>
      <div class="form-row">
        <div class="col-md-4 mb-3">
          <label for="validationCustom01">First name</label>
          <input type="text" class="form-control" id="validationCustom01" placeholder="First name" value="Mark" required>
          <div class="valid-feedback">
            Looks good!
          </div>
        </div>
        <div class="col-md-4 mb-3">
          <label for="validationCustom02">Last name</label>
          <input type="text" class="form-control" id="validationCustom02" placeholder="Last name" value="Otto" required>
          <div class="valid-feedback">
            Looks good!
          </div>
        </div>
        <div class="col-md-4 mb-3">
          <label for="validationCustomUsername">Username</label>
          <div class="input-group">
            <div class="input-group-prepend">
              <span class="input-group-text" id="inputGroupPrepend">@</span>
            </div>
            <input type="text" class="form-control" id="validationCustomUsername" placeholder="Username" aria-describedby="inputGroupPrepend" required>
            <div class="invalid-feedback">
              Please choose a username.
            </div>
          </div>
        </div>
      </div>
      <div class="form-row">
        <div class="col-md-6 mb-3">
          <label for="validationCustom03">City</label>
          <input type="text" class="form-control" id="validationCustom03" placeholder="City" required>
          <div class="invalid-feedback">
            Please provide a valid city.
          </div>
        </div>
        <div class="col-md-3 mb-3">
          <label for="validationCustom04">State</label>
          <input type="text" class="form-control" id="validationCustom04" placeholder="State" required>
          <div class="invalid-feedback">
            Please provide a valid state.
          </div>
        </div>
        <div class="col-md-3 mb-3">
          <label for="validationCustom05">Zip</label>
          <input type="text" class="form-control" id="validationCustom05" placeholder="Zip" required>
          <div class="invalid-feedback">
            Please provide a valid zip.
          </div>
        </div>
      </div>
      <div class="form-group">
        <div class="form-check">
          <input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
          <label class="form-check-label" for="invalidCheck">
            Agree to terms and conditions
          </label>
          <div class="invalid-feedback">
            You must agree before submitting.
          </div>
        </div>
      </div>
      <button class="btn btn-primary" type="submit">Submit form</button>
    </form>
    
    <script>
    // Example starter JavaScript for disabling form submissions if there are invalid fields
    (function() {
      'use strict';
      window.addEventListener('load', function() {
        // Fetch all the forms we want to apply custom Bootstrap validation styles to
        var forms = document.getElementsByClassName('needs-validation');
        // Loop over them and prevent submission
        var validation = Array.prototype.filter.call(forms, function(form) {
          form.addEventListener('submit', function(event) {
            if (form.checkValidity() === false) {
              event.preventDefault();
              event.stopPropagation();
            }
            form.classList.add('was-validated');
          }, false);
        });
      }, false);
    })();
    </script>
    
    
    </body>
    
        <!-- jQuery first, then Popper.js, then Bootstrap JS -->
        <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    </body>
    </html>
    

    您可以参考以下文档:https://getbootstrap.com/docs/4.0/components/forms/?#validation

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 2015-08-07
      • 2013-10-17
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多