<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;
}
Код выполняется для проверки входящего текста, но после того, как я нажимаю кнопку сохранения, он позволяет сохранить значение, когда значение равно нулю и пусто, он разрешает его. я хочу захватить форму до тех пор, пока значение не будет правильно задано в соответствии с проверкой , и он должен позволять отправлять форму только в том случае, если она верна.
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;
}
Надеюсь, это поможет.
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>
Спасибо всем, кто ответил на мой вопрос, мне было очень полезно узнать, чего на самом деле не хватает. Вот ответ, который мне подходит
Функция проверки вызывается из onfocusout в поле ввода, но это не может предотвратить отправку. Вместо этого вы должны вызвать его из onsubmit = "" на кнопке отправки.
Это также может помочь добавить;
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;
}
Я думаю, что с этой строкой что-то не так:
<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 и посмотрите разницу.
Надеюсь это поможет.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
@click.prevent
читается так, как будто вы используете Vue.js. Почему бы тогда не добавить тег?