验证表单中单击提交按钮的输入

时间:2021-04-09 12:01:57

标签: javascript html forms bootstrap-5

我正在尝试验证我的表单,但控制台从未向我显示错误。我已经按照 Bootstrap 文档的说明做了,但什么也没发生。例如,我希望当单击按钮时,如果任何字段为空,它会在该字段中显示警报或错误。如果有人能帮助我,我将不胜感激。

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6" crossorigin="anonymous">
        <script src="https://kit.fontawesome.com/e6233a0317.js" crossorigin="anonymous"></script>
        <link rel="stylesheet" href="./css/product.css">
        <link rel="stylesheet" href="./css/styles.css">
        <link rel="stylesheet" href="./css/help.css">
        <link rel="stylesheet" href="./css/tags.css">
        <title>TejidosPulido E-Commerce</title>
    </head>
    <body>
        <header id="header_menu"></header>

        <br>
        <main role="main">
            <div class="container rounded" style="background-color: rgb(228, 225, 225);">
                <br>
                <form class="needs-validation" novalidate style="padding: 15px 40px;">
                    <div class="row">
                        <div class="col-sm-6" style="margin-bottom: 50px;">
                            <div class="input-group mb-3">
                                <span class="input-group-text title" for="validationDefault01">Número de producto</span>
                                <input type="text" class="form-control" id="inputNum" style="text-align: end;" required>
                                <div class="invalid-feedback">Please choose a username.</div>
                            </div>
                            <div class="input-group" style="width: 100%;">
                                <span class="input-group-text title" for="inputNum">Visible</span>
                                <div class="input-group-text"  style="background: white">
                                    <span class="input-group-addon"><input type="radio" id="visible" name="visibilidad" value="always"> Si</span>
                                    <span class="input-group-addon"><input type="radio" id="invisible" name="visibilidad" value="never"> No</span>
                                </div>
                            </div>
                            <div class="invalid-feedback">Field empty.</div>
                        </div>
                        <div class="col-sm-6"></div>
                    </div>
                    <div class="row">
                        <div class="col-sm-7"></div>
                        <div class="col-sm-4">
                            <span class="input-group-text title">Imagen de producto</span>
                        </div>
                        <div class="col-sm-1"></div>
                    </div>
                    <div class="row">
                        <div class="col-sm-6" style="margin-bottom: 15px;">
                            <div class="input-group mb-3">
                                <span class="input-group-text title" for="inputName">Nombre del producto</span>
                                <input type="text" class="form-control" id="inputName" required>
                            </div>
                            <div class="invalid-feedback">Field empty.</div>
                        </div>
                        <div class="col-sm-1"></div>
                        <div class="col-sm-4">
                            <div class="input-group mb-3">
                                <input type="file" class="form-control" id="inputImage" accept="image/*">
                            </div>
                        </div>
                        <div class="col-sm-1"></div>
                    </div>
                    <br>
                    <div class="row">
                        <div class="col-sm-4" style="vertical-align: middle; padding-bottom: 10px;">
                            <div class="input-group mb-3">
                                <span class="input-group-text precio title">Precio</span>
                                <input type="text" class="form-control" id="inputPrecio" placeholder='0.00' required style="float: left; text-align: end; width: 30%;" pattern="([0-9]*)(.)?([0-9]*)" title="Introduce un número.">
                                <span class="input-group-text short">€/m</span>
                            </div>
                            <div class="invalid-feedback">Field empty.</div>
                        </div>
                        <div class="col-sm-4" style="vertical-align: middle; padding-bottom: 10px;">
                            <div class="input-group mb-3">
                                <span class="input-group-text peso title">Peso</span>
                                <input type="text" class="form-control" id="inputPeso" placeholder='0' required style="float: left; text-align: end; width: 30%;" pattern="([0-9]*)(.)?([0-9]*)" title="Introduce un número.">
                                <span class="input-group-text short">gr/m</span>
                            </div>
                            <div class="invalid-feedback">Field empty.</div>
                        </div>
                        <div class="col-sm-4" style="vertical-align: middle; padding-bottom: 10px;">
                            <div class="input-group mb-3">
                                <label class="input-group-text tipo-large" for="product_type" style="background: #0bbe83; color: white; font-weight: bold;">Tipo de producto</label>
                                <select class="form-select" id="product_type">
                                    <option selected>Selecciona...</option>
                                    <option value="referencia">Referencia</option>
                                    <option value="color">Color</option>
                                </select>
                            </div>
                        </div>
                    </div>
                    <br>
                    <div class="row">
                        <div class="col-sm-6">
                            <span class="input-group-text title" for="inputDescripcion">Descripción:</span>
                            <textarea id="inputDescripcion" name="inputDescripcion" rows="5" style="width: 100%; padding: 10px;"></textarea>
                        </div>
                        <div class="col-sm-6">
                            <span class="input-group-text title" for="inputFunciones">Funciones bàsicas:</span>
                            <textarea id="inputFunciones" name="inputFunciones" rows="5" style="width: 100%; padding: 10px;"></textarea>
                        </div>
                    </div>
                    <br>
                    <div class="btn-group" role="group" style="float:right">
                        <button class="btn btn-dark" id="guardarButton" type="submit" class="btn btn-sm btn-outline-secondary">Guardar </button>
                    </div>
                    <br>
                    <br>                
                    <br>
                </form>            
            </div>
            <hr class="featurette-divider">    
            <footer class="container" id= "footer"></footer>

        </main>

        <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
        <script src="https://www.gstatic.com/firebasejs/8.2.3/firebase-app.js"></script>
        <script src="https://www.gstatic.com/firebasejs/8.2.3/firebase-auth.js"></script>
        <script src="https://www.gstatic.com/firebasejs/8.2.3/firebase-analytics.js"></script>
        <script src="https://www.gstatic.com/firebasejs/8.2.3/firebase-database.js"></script>
        <script src="https://www.gstatic.com/firebasejs/8.2.3/firebase-storage.js"></script>
        <script src='./js/firebaseConfig.js'></script>
        <script src="./js/session.js"></script>
        <script src="./js/header.js"></script>
        <script src="./js/newproducto.js"></script>
        <script src="./js/footer.js"></script>
        
    </body>
</html>

这是javascript函数:

(function () {
    'use strict'

    // Fetch all the forms we want to apply custom Bootstrap validation styles to
    var forms = document.querySelectorAll('.needs-validation')

    // Loop over them and prevent submission
    Array.prototype.slice.call(forms)
        .forEach(function (form) {
        form.addEventListener('submit', function (event) {
            if (!form.checkValidity()) {
            event.preventDefault()
            event.stopPropagation()
            }

            form.classList.add('was-validated')
        }, false)
        })
})()

2 个答案:

答案 0 :(得分:0)

跨度 for 和输入 id 应该相同。

在您的情况下,错误实际上是在检测但无法分配给正确的 id w.r.t for

答案 1 :(得分:0)

<块引用>

“我正在尝试验证我的表单,但控制台从未显示我 错误"

控制台不应显示错误,因为 code is working as expected

很可能与您的环境中包含的许多其他 JS 文件之一存在冲突。此外,HTML 的结构很差(按钮上的 2 个类属性),invalid-feedback 需要与输入位于同一父级中。