[BS4] Bootstrap 4 Form
關鍵字:bs-form-default, bs-form-inline, bs-form-static, bs-form-custom
Bootstrap4 Form @ CodePen
[TOC]
留意事項(HotFix)
Read Only: 僅供閱讀的欄位
keywords: .form-control-plaintext
當使用 .form-control-plaintext 這個 class 想要讓該 input 欄位變成 readonly 時,記得加上 .w-100 才能修正寬度問題。
Radio, Select: 解決 radio button 和 label 沒有垂直置中的現象
.form-check-input:only-child {
  position: absolute;
}
input-group 圓角問題
在 .from-control 加上 rounded-right 這個 class:
<div class="input-group">
  <div class="input-group-prepend">
    <span class="input-group-text" id="inputGroupPrepend">@</span>
  </div>
  <input
    type="text"
    class="form-control rounded-right"
    id="validationCustomUsername"
    placeholder="Username"
    aria-describedby="inputGroupPrepend"
    required
  />
  <div class="invalid-feedback">Please choose a username.</div>
</div>
Missing border radius on input group with validation feedback @ Github Issues
Form Validation 表單驗證
覆蓋 Bootstrap .is-valid 的預設效果:
Form Validation @ PJCHENder Codepen
如果使用者輸入 valid content,則隱藏 feed-back
/**
 * Bootstrap 在預測的情況下即使驗證通過仍會顯示提示訊息
 * 因此如果希望驗證通過就不要顯示提示訊息,需要補上這段
**/
.was-validated .form-control:valid ~ .invalid-feedback {
  display: none;
}
// :valid 的資料不用變色
.was-validated .form-control:valid,
.form-control.is-valid,
.was-validated .custom-select:valid,
.custom-select.is-valid {
  border-color: rgba(0, 0, 0, 0.15);
}
/**
 * 1. 當使用者送出表單時,顯示未驗證的欄位
 * 2. 讓表單 focus 到第一個為驗證的欄位
 * 3. 避免 Number 可以透過 Wheel 來改變
 **/
document.addEventListener('DOMContentLoaded', function () {
  // Form Validation
  var form = document.querySelector('form');
  form.addEventListener(
    'submit',
    function (event) {
      if (form.checkValidity() == false) {
        event.preventDefault();
        event.stopPropagation();
        form.classList.add('was-validated');
        $('.was-validated .form-control:invalid').filter(':first').focus();
      }
    },
    false,
  );
  // Prevent input number scrolling
  $('input[type=number]').on('mousewheel', function (e) {
    $(this).blur();
  });
});