<form>
    <div class="form-group">
        <label for="add-price">Price
            <span class="glyphicon glyphicon-euro"></span>
        </label>
        <input type="number" class="form-control" id="add-price" value="0" step="any" min="0" name="number" onfocusout="check(this)" v-model="product.std_rte"/>
    </div>
<button type="submit" class="btn btn-primary" @click.prevent="createProduct">Create</button>
</form>

Выше - HTML-код вопроса и нижеследующий javascript, необходимый для проверки.

function check(input){
    if (input.value == 0 || input.value == ""){
        // input.setCustomValidity('The number must not be zero or empty.');
        alert("The number must not be zero or empty.");
        return false;
     }else {
        input.setCustomValidity('');
     }
   return true;
}

Код выполняется для проверки входящего текста, но после того, как я нажимаю кнопку сохранения, он позволяет сохранить значение, когда значение равно нулю и пусто, он разрешает его. я хочу захватить форму до тех пор, пока значение не будет правильно задано в соответствии с проверкой , и он должен позволять отправлять форму только в том случае, если она верна.

1
Ajharali 25 Окт 2019 в 14:23
1
 – 
rklaasboer
25 Окт 2019 в 14:26
@click.prevent читается так, как будто вы используете Vue.js. Почему бы тогда не добавить тег?
 – 
connexo
1 Ноя 2019 в 13:49
Извините за это, забыл упомянуть тег :)
 – 
Ajharali
1 Ноя 2019 в 15:26

5 ответов

Что вы делаете неправильно, так это то, что вы сначала проверяете поле ввода на предмет неправильного ввода, а затем отправляется форма, которая является корпусом формы, которая должна быть отправлена. Проверка проверяется перед отправкой формы.

Что вам нужно сделать, так это проверить поле на кнопке, чтобы при нажатии кнопки отправки формы сначала проверялось поле перед отправкой, а когда значение проходит проверку, вы можете отправить форму через javascript.

Я изменил код HTML как:

<form id="form">
    <div class="form-group">
                    <label for="add-price">Price <span class="glyphicon glyphicon-euro"></span></label>
                     <input type="number" class="form-control" id="add-price" value="0" step="any" min="0" name="number" v-model="product.std_rte"/>
    </div>
    <button type="submit" class="btn btn-primary" onclick="check(event)">Create</button>
    </form>

И функция javascript как

    function check(input) {
        var price = document.querySelector('#add-price').value;
        debugger;
        input.preventDefault();
        if (price == 0 || price == "") {
            // input.setCustomValidity('The number must not be zero or empty.');
            alert("The number must not be zero or empty.");
            return false;
        } else {
            input.setCustomValidity('');
        }
        document.querySelector('#form').submit();

        return true;
        }

Надеюсь, это поможет.

1
Mazhar Khan 25 Окт 2019 в 14:43
       function printError(elemId, hintMsg) {
            document.getElementById(elemId).innerHTML = hintMsg;
        }

       function check(input) {
        var priceErr = true;
        var bt = document.getElementById("btsubmit");
        if (input.value <= 0 || input.value ==="") {
            bt.disabled = true;
            printError("priceErr", "Please enter valid price");
            return false;
        } else {
            bt.disabled = false;
            priceErr = false;
            printError("priceErr", "");
        }
        return true;
        }

И соответствующий код Html

<input type="number" class="form-control" id="add-price" onkeyup="check(this)" v-model="product.std_rte" required/>
<div class="error" id="priceErr"></div>

<input class="form-control" id="add-itemgrp1hd" v-model="product.itemgrp1hd"required/>
<div class="error"><p>*Mandatory<p></div>

<input class="form-control" id="add-name" v-model="product.itemfullhd" required/>
<div class="error"><p>*Mandatory<p></div>

<input type="file" id="edit-imagemain" v-model="product.Image_file" @change="onFileChanged" required/>
<div class="error"><p>*Mandatory<p></div>

Спасибо всем, кто ответил на мой вопрос, мне было очень полезно узнать, чего на самом деле не хватает. Вот ответ, который мне подходит

1
Ajharali 1 Ноя 2019 в 13:44

Функция проверки вызывается из onfocusout в поле ввода, но это не может предотвратить отправку. Вместо этого вы должны вызвать его из onsubmit = "" на кнопке отправки.

0
simonmikkelsen 25 Окт 2019 в 14:27

Это также может помочь добавить;

          onfocusout="check(this);" 


         function check(input) {
         console.log(typeof input.value); //might be possible that the check func is 
                                         //fine but not the data
         console.log(input.value);      //so lets have a look  
         var chk=true;
         try{
         if (typeof input.value === "undefined" ){ chk=false;}; //shouldn be but...
         if (input.value === 0 ){ chk=false;}; // more secure with type checking
         if (input.value === "" ){ chk=false;};
         if (parseInt(input.value) === 0 ){ chk=false;};  //if it is "0" - a string             
         } catch(ex) {
         chk=false;  
         console.log(ex);// just to learn more
         } 
         if (chk===false){  
            // input.setCustomValidity('The number must not be zero or empty.');
            alert("The number must not be zero or empty.");
            return false;
        } else {
            input.setCustomValidity('');
        }
        return true;
        }
0
Thomas Ludewig 25 Окт 2019 в 14:36

Я думаю, что с этой строкой что-то не так:

<input type="number" class="form-control" id="add-price" value="0" step="any" min="0" name="number" onfocusout="check(this)" v-model="product.std_rte"/>

Вы использовали onfocusout, поэтому после отправки он разрешает нулевые значения. Измените его на событие onclick и посмотрите разницу.

Надеюсь это поможет.

1
Rohan Rao 25 Окт 2019 в 14:26