#javascript #html #jquery #validation #jquery-ui-autocomplete
#javascript #HTML #jquery #проверка #jquery-ui-автозаполнение
Вопрос:
У меня есть форма, которая использует автозаполнение jQuery для заполнения входных данных. Чтобы пользователь не мог ввести первые пару букв, а затем перейти к следующему вводу, предполагая, что поле заполнено, я включаю проверку формы JS, которая сравнивает входные данные с массивом. Сравнение работает нормально, но по какой-то причине значение поля ввода colltown_name
не передается для проверки формы. Однако другие поля ввода.
Я создал тестовую среду, которая при ошибке отображает то, что было отправлено на colltown_name
ввод.
var x = document.forms["quoteRequest"]["colltown_name"].value; //returns: "Localhost says " , so it is receiving nothing
var x = document.forms["quoteRequest"]["colltown_name"].name; //returns: "Localhost says colltown_name "
Я не могу понять, почему value ничего не возвращает для проверки, но name возвращает значение name
Если я проверю отправку формы в Google Chrome, минуя проверку, colltown_name.value
она будет отправлена.
Ниже приведены фрагменты моей формы и проверки:-
//var x = document.forms["quoteRequest"]["descr_goods"].value; //returns value "Goods"
//var x = document.forms["quoteRequest"]["colltown_name"].name; //returns name "colltown_name"
var x = document.forms["quoteRequest"]["colltown_name"].value; //returns nothing
var arr=["AANDRUS, Bloemfontein", "AANHOU WEN, Stellenbosch", "ABBOTSDALE, Western Cape"];
function quoteValid() //ADDED BY ADIEB
{
if ($.inArray(x, arr) == -1)
{
alert(x);
return false;
}
}
<form name="quoteRequest" action="index.php?route=product/product" method="post" enctype="multipart/form-data" class="form-horizontal" onsubmit="return quoteValid()">
<div class="ui-widget">
<input type="text" id="ctags" class="form-control col-md-8" autocomplete="off" placeholder="Start typing Collection Town" name="colltown_name">
<input id="ctag" type="hidden" name="colltown">
</div>
<input type="text" class="form-control col-md-6" id="desc" name="descr_goods" value="Goods" required>
Комментарии:
1. Я не уверен, что полностью понимаю ваш вопрос, но помогает ли здесь какой-либо код вообще? jsfiddle.net/natelegakis/ruwgoe95 Я предполагаю, что prevenDefault и / или .focus могут помочь. Или, может быть, это можно использовать где-нибудь в вашем коде. если ( например.keyCode == $.ui.keyCode. ВКЛАДКА) Взгляните на эту скрипку. jsfiddle.net/uymYJ/8
2. На самом деле вопрос заключается в том, что когда вызывается событие onsubmit, значение colltown_name не передается функции validate», поэтому она не может затем оценить, является ли ввод допустимым.
Ответ №1:
colltown_name
Кажется, что ваше значение определяется только один раз при загрузке вашей страницы. Таким образом, значение x
присваивается undefined
, когда вы передаете его quoteValid
функции при отправке формы, не пройдя проверку.
Вам нужно будет получить обновленное значение поля при отправке:
function quoteValid() {
var x = document.forms['quoteRequest']['colltown_name'].value;
if ($.inArray(x, arr) == -1) {
alert(x);
return false;
}
}
Комментарии:
1. var x = document.forms[«QuoteRequest»][«descr_goods»].value; //возвращает значение «Товары» при отправке. colltown_name не имеет значения при загрузке страницы, затем пользователь вводит информацию и отправляет, но не возвращает значения?
2. Вам нужно будет получить обновленное значение поля при отправке: — Не уверен, как это можно сделать?
3. 1. Это потому, что значение «Товары» жестко закодировано в вашей форме. 2. Скопируйте var x = document.forms[‘QuoteRequest’][‘colltown_name’].value; в функцию quoteValid(), как я сделал выше.
4. Спасибо TimonNetherlands — это работает, и сегодня я кое-что узнал…