javascript - 如何在 Bootstrap 4 .btn-group-toggle 上显示 JavaScript 验证错误

标签 javascript validation bootstrap-4

我使用 Bootstrap 4 制作了一个星级评分 UI .btn-group.btn-group-toggle如下所示:

<div class="form-group">
    <div class="btn-group btn-group-toggle" data-toggle="buttons" aria-label="Rate this">
        <label class="btn btn-dark btn-sm">
            <input type="radio" name="rating" value="1" required> 1
        </label>
        <label class="btn btn-dark btn-sm">
            <input type="radio" name="rating" value="2" required> 2
        </label>
        <label class="btn btn-dark btn-sm">
            <input type="radio" name="rating" value="3" required> 3
        </label>
        <label class="btn btn-dark btn-sm">
            <input type="radio" name="rating" value="4" required> 4
        </label>
        <label class="btn btn-dark btn-sm">
            <input type="radio" name="rating" value="5" required> 5
        </label>
    </div>
    <div class="invalid-feedback">
        Please rate the item in the scale of 5
    </div>
</div>

但不幸的是,当未提供评级时,验证错误是不可见的。我正在使用建议的 Bootstrap 4 HTML5 default validation method使用 JavaScript。

如何显示 .btn-group-toggle 的验证错误?

最佳答案

Bootstrap 4 自定义验证消息实际上使用以下规则显示:

.was-validated .form-control:invalid ~ .invalid-feedback,
.was-validated .form-control:invalid ~ .invalid-tooltip,
.form-control.is-invalid ~ .invalid-feedback,
.form-control.is-invalid ~ .invalid-tooltip {
    display: block;
}

波浪号 ~ 是 CSS 中的兄弟组合符,它仅在验证错误存在时才有效,如下所示:

<input type="text" class="form-control" required>
<div class="invalid-feedback">
    The text field is mandatory
</div>

.form-control.invalid-feedback 是兄弟。

但在我的例子中,输入字段(单选按钮)比 .invalid-feedback 深得多。所以我使用 HTML5 javascript API 添加了一些额外的代码来显示验证错误:

// ...
if (form.checkValidity() === false) {
    event.preventDefault();
    event.stopPropagation();

    var theRadio = form.querySelector('input[type=radio]');
    if (theRadio.checkValidity() === false) {
        theRadio.parentNode.parentNode.classList.add('group-invalid');
    } else {
        theRadio.parentNode.parentNode.classList.remove('group-invalid');
    }
}
// ...

这将使用 .parentNode.parentNode (两次)将类 .invalid-group 添加到包含的 .btn-group ,这样我们就可以做一些样式:

.was-validated .group-invalid + .invalid-feedback {
    display: block;
}

这样会出现验证错误,但不会消失[when valid],直到再次提交表单。

关于javascript - 如何在 Bootstrap 4 .btn-group-toggle 上显示 JavaScript 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58780276/

相关文章:

javascript - html5mode 破坏了 AngularJS 路由

javascript - 使用 http DELETE 终止用户 session

javascript - 设置输入:radio by jQuery then check checked by clicking

javascript - Firebase 验证规则正则表达式不起作用

css - 文本区域的模板驱动表单验证

html - Flexbox div 隐藏在小屏幕上

javascript - AngularJS 按钮 ng-click 不起作用

javascript - Parsley.js 除了英文字母之外还验证僧伽罗语泰米尔语(非英语字符)

HTML 和 CSS 文件相同,但样式在元素之间应用不同

twitter-bootstrap - Bootstrap 4.1 固定 div,带 overflow-y 和全宽