Проверка формы JavaScript «значение» не передается из события отправки формы

#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 — это работает, и сегодня я кое-что узнал…