Как сохранить значение при вводе после возникновения ошибок проверки

#html #validation #input #handlebars.js

Вопрос:

У меня есть некоторая проверка, настроенная в моей форме ввода руля, и если пользователь забудет заполнить поле ввода и отправит форму, я хочу, чтобы данные, которые они уже ввели, сохранялись после ошибки проверки после отправки. В настоящее время он работает для полей ввода текста, но я не могу заставить его работать для <select> ввода. Когда форма отправлена, выбранное входное значение просто сбрасывается. Я попытался установить значение в качестве атрибута в теге select и в тегах опций, но ни один из них не работает. Это то, что я должен настроить с помощью jQuery? Любые советы о том, как этого достичь, будут высоко оценены!

Это мой html-код. Поле, с которым у меня возникли проблемы, помечено *

 <div class="row">
    {{#with costHours}}
    <nav aria-label="breadcrumb">
        <ol class="breadcrumb">
            <li class="breadcrumb-item"><a href="/">Home</a></li>
            <li class="breadcrumb-item"><a href="/find">Find</a></li>
            <li class="breadcrumb-item active" aria-current="page">Add {{project_id}}</li>
        </ol>
    </nav>
    <div class="card border-secondary w-100 text-light" style="background-color: #333f48">
        <h5 style="background-color: #bf5700;" class="card-header">Costs amp;amp; Hours</h5>
        <div class="card-body w-100">
            {{/with}}
            {{#each errors}}
            <div class="my-2 text-start" style="border: 1px solid black;">
                <p>{{text}}</p>
            </div>
            {{/each}}
            {{#with costHours}}
            <form action='/add/costs_hours/{{project_id}}' id="formData" method="POST">
            {{/with}}
                <table id="tableData" class="table text-light text-center mt-3">
                    <thead>
                        <tr>
                            <th scope="col">Project ID</th>
                            <th scope="col">Implementation or Annual</th>
                            <th scope="col">Category</th>
                            <th scope="col">Costs</th>
                            <th scope="col">Hours</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>
                                <div class="input-group mb-3">
                                    {{#with costHours}}
                                    <input id="validationCustom03" value="{{project_id}}" name="project_id" type="text"
                                    {{/with}}
                                        class="form-control">
                                </div>
                            </td>
                            <td>
                                ******<div class="input-group mb-3">
                                    <div class="input-group mb-3">
                                        <select value='{{imp_or_ann}}' name="imp_or_ann" class="form-select imp_or_ann"
                                            id="inputGroupSelect01">
                                            <option selected disabled>Choose...</option>
                                            <option value='{{imp_or_ann}}'>Implementation</option>
                                            <option value='{{imp_or_ann}}'>Annual</option>
                                        </select>
                                    </div>
                                </div>******
                            </td>
                            <td>
                                ******<div class="input-group mb-3">
                                    <div class="input-group mb-3">
                                        <select value='{{category}}' name="category" class="form-select category" id="inputGroupSelect01">
                                            <option disabled selected>Choose...</option>
                                            <option>EMO</option>
                                            <option>Analysts</option>
                                            <option>Maintenance</option>
                                            <option>ETS</option>
                                            <option>BOT</option>
                                            <option>OtherUT</option>
                                            <option>Materials</option>
                                            <option>Non-UT Contract</option>
                                            <option>Contingency</option>
                                        </select>
                                    </div>
                                </div>******
                            </td>
                            <td>
                                <div class="input-group mb-3">
                                    <input value='{{cost}}' name="cost" type="text" class="cost form-control">
                                </div>
                            </td>
                            <td>
                                <div class="input-group mb-3">
                                    <input value='{{hours}}' name="hours" type="text" class="hours form-control">
                                </div>
                            </td>
                        </tr>
                    </tbody>
                </table>

                <div class="card-footer text-end">
                    <button type="submit" class="btn btn-success text-light">Submit
                    </button>
                </div>
            </form>
        </div>
    </div>
</div>
 

Я не знаю, будет ли это актуально, но это мой контроллер, который настраивает проверку.

 createCostsHours: async (req, res) => {


        let { project_id, imp_or_ann, category, cost, hours } = req.body;

        let errors = []

        try {

            const costHours = await Prjt_costs_hours.findOne({
                where: {
                    project_id
                }
            });
            
            if (!imp_or_ann){
                errors.push({text: "please select an option for implementation or annual"})
            };

            if (!category){
                errors.push({text: "please select an option for category"})
            };

            if (!cost){
                errors.push({text: "please enter a value for cost"})
            };

            if (!hours){
                errors.push({text: "please enter a value for hours"})
            };

            if (errors.length > 0){
                 res.render('add/addCostsHours', {
                    errors, imp_or_ann, category, cost, hours, costHours
                })
            
            } else {

            const costHours = await Prjt_costs_hours.create({
                project_id, imp_or_ann, category, cost, hours,
            });

            return res.redirect('/find')

        }

        } catch (error) {

            console.error(error.message);
            return res.status(500).json(error);

        }
    },