Bootstrap 4のフォームバリデーション

私はbootstrapの初心者ですが、bootstrap3のフォーム検証プラグインなどはたくさん見ましたが、bootstrap4用のものは見当たりません。

複数のフォームを検証しようとしているのですが、以下のようなコードになっています:

Contact

First Name

<input id="firstname" name="firstname" placeholder="First Name" class="form-control" type="text">

Last Name

<input id="lastname" name="lastname" placeholder="Last Name" class="form-control" type="text">

E-Mail

<input id="email" name="email" placeholder="E-Mail Address" class="form-control" type="email">

Phone #

<input id="phone" name="phone" placeholder="Phone" class="form-control" type="text">

Message

<textarea id="comment" class="form-control" name="comment" placeholder="Your Message">
質問へのコメント (3)
ソリューション

まず、Jonathan Dionが提案したように、外部ライブラリを使って私の問題を解決しました。しかし、最近、私はこのような.NET Frameworkに出会いました:

Bootstrap v4.0では、独自のフォームバリデーションが導入されましたが、バックエンドのphpバリデーションと組み合わせることが可能です。Doc]2から:


  <div class="form-row">
    <div class="col-md-4 mb-3">
      First name
      <input type="text" class="form-control" id="validationCustom01" placeholder="First name" value="Mark" required>
      <div class="valid-feedback">
        Looks good!
      </div>
      <div class="invalid-feedback">
        Doesn't look good!
      </div>
    </div>
  </div>
</div>

そして、JS .NETを使用する:

<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>

これは、与えられたパターンやプロパティに従って、入力ボーダーの色付けや、有効/無効なフィードバックブロックの表示を行うものである。CSSの2つの擬似クラス、 :invalid:valid によって適用されます。これは <input>, <select>, <textarea> 要素に適用されます。

解説 (1)

**jqueryvalidation]1を試してみてはいかがでしょうか。使い方はとても簡単で、ドキュメントを読むだけです。

inputrequired`属性を追加すれば、jqueryvalidationが仕事をしてくれます。スタイリングは、独自のCSSを追加して、bootstrapのような見た目にすることができます。

お役に立てれば幸いです。

$(document).ready(function(){
 $('#contact_form').validate()
})

[デモ][2]です。

解説 (3)

私のコードがバリデーションされない理由がわかりました:バリデーションのトリガーとなる送信ボタンがなかったのです。必ず設置してください。

Save
解説 (0)

ここにはライブラリーは実際には必要ありません。ネイティブの reportValidation()メソッドを使用できます:MDN。 個々の入力またはフォーム自体全体でそれを呼び出すことができます。

解説 (0)

Bootstrap 4 JS Form validationを実装するためのよりシンプルで少し現代的な方法を見つけました。

:各 < form>要素には novalidate属性が必要であると同時に、各 < input>要素には required属性が必要であることに注意してください。

// Upon load..
window.addEventListener('load', () => {

  // Grab all the forms
  var forms = document.getElementsByClassName('needs-validation');

  // Iterate over each one
  for (let form of forms) {

    // Add a 'submit' event listener on each one
    form.addEventListener('submit', (evt) => {

      // check if the form input elements have the 'required' attribute  
      if (!form.checkValidity()) {
        evt.preventDefault();
        evt.stopPropagation();
        console.log('Bootstrap will handle incomplete form fields');
      } else {
        // Since form is now valid, prevent default behavior..
        evt.preventDefault();
        console.info('All form fields are now valid...');
      }

      form.classList.add('was-validated');

    });

  }

});


<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>


<div class="container" style="padding-top: 40px;">

    <div class="form-row">
      <div class="form-group col-6">
        Name
        <input type="text" class="form-control" id="input-name-search" placeholder="Name" required>
        <div class="valid-feedback">Looks good!</div>
        <div class="invalid-feedback">Enter a name please.</div>
      </div>
      <div class="col-6">
        Search student
      </div>
    </div>

</div>

解説 (0)