Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проверка полей отправляемой формы. (https://javascript.ru/forum/jquery/12395-proverka-polejj-otpravlyaemojj-formy.html)

denisOgr 15.10.2010 17:05

Проверка полей отправляемой формы.
 
Добрый день. Вопрос по проверке полей форм. Есть страница на которой много форм. это аукцион, форма с возможностью сделать ставку.
Мне нужно что бы при заполенении текстового(цифра ставки) при нажатии сделать ставку эта форма проверялась и если все хорошо то оправлялась.
Проблема как провериь значение input именно отправляемой формы, с учетом что у всех форм одинакой class. И в чем ошибка в проверке полей. Конкретнее, вот код
Вот скрипт
<script type="text/javascript">    
    $(document).ready(function() {
       $('.set-bid').submit(function() {
  var     start_price = $("#price").val(),
                id = $("#idc").val(),
                bid_id = "#bid"+id,
                bid = $(bid_id).val(),
                allFields = $([]).add(start_price).add(id).add(bid),
                tips = $(".validateTips");

                function checkLength(o,n,min,max) {

                    if ( o.val().length > max || o.val().length < min ) {
                        alert('Ставка не принята! Количество символов должно быть больше 1 и меньше 10');
                        return false;
                    } else {
                        return true;
                    }

                }

                function checkRegexp(o,regexp,n) {

                    if ( !( regexp.test( o.val() ) ) ) {
                        alert('Ставка не принята! Ваша ставка должна быть числом.');
                        return false;
                    } else {
                        return false;
                       
                    }

                }

                function checkStratPrice(start,now) {

                    if ( start>now ) {
                        alert('Ставка не принята! Ваша ставка должна быть больше или равна стартовой.' );
                        return false;
                    } else {
                        return true;
                    }

                }
                var bValid = true;
               bValid = checkRegexp(bid,/^([0-9_])+$/i,"");
               bValid = bValid && checkStratPrice(start_price,bid);
               bValid = bValid && checkLength(bid,"",1,10);
               

                if (!bValid) {
                    return false;
                }
  
});
});
</script>


Вот сам код форм
<form action="/auction.php"
         method="GET"  class="set-bid" >
       <input type="hidden" id="cart" name="cart" value="auction" />
       <input type="hidden" id="idc" name="idc" value="1" />
       <input type="hidden" id="price" name="price" value="50" />
       <input  type="text" size="4" name="bid" id="bid"  />
       <div class="clear"></div>
       <input type="image" src="/i/but_auct_bid.png" /><br><br>       
        <b><a href="/auction/now/1/">купить сейчас 150</a></b><br>
        </form>

<form action="/auction.php"
         method="GET"  class="set-bid" >
       <input type="hidden" id="cart" name="cart" value="auction" />
       <input type="hidden" id="idc" name="idc" value="2" />
       <input type="hidden" id="price" name="price" value="20" />
       <input  type="text" size="4" name="bid" id="bid"  />
       <div class="clear"></div>
       <input type="image" src="/i/but_auct_bid.png" /><br><br>       
        <b><a href="/auction/now/<%ID%>/">купить сейчас 100</a></b><br>
        </form>

Проблемы
1. При более 1-ой формы берет значение input-ов из ближайшей. Это понятно. поэтому мне нужно брать из формы из той которая отправляется или той где был нажата кнопка ставка. Можно ли такое?
2. Не происходит проверка на ввод только цифр. Функция checkRegexp должна сравнивать число с рег выражением, а я даже в функцию не вхожу .
3. Не происходит проверка на длину вводимой ставки функцией checkLength.
4. Ввожу ставку больше 100 пишет что ставка должна быть больше стартовой, проверяю через alert вывожу два сравнимых значия все верно 100>50 . А ошибку выдает. В общем намучался. Хелп
:(
Jquery-очень класная штука. но иногда так "выводит")
В чем проблемы помогите товарищи!(

walabyn 16.10.2010 19:48

хм.. гетом отправляешь форму.. может стоит постом отправлять?
но в любом случае у jQuery есть функции $.get и $.post (+есть $.json).
твой подход - проверять на .submit - тоже можно но геморнее.
var hasError = false; //по дефолту ошибки нет, вводим переменную
		var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i); //проверка e-mail
		
		var nameVal = $("#clientName").val();
		if(nameVal == '') {
			$("#nameError").show(); //делаем невидимый span или p с текстом ошибки под нужным инпутом с id="nameError", если поле с id="clientName" не заполнено - показываем
			hasError = true;
		} //если инпут с id="clientName" не заполнено, то проверяющая переменная становится true
		
		var emailFromVal = $("#clientEmail").val();
		if(emailFromVal == '') {
			$("#emailError1").show();
			hasError = true;
		} else if(!pattern.test(emailFromVal)) {
			$("#emailError2").show();
			hasError = true;
		} //проверка паттерна emaila (функция test)

		//итд итп, потом проверяем, если hasError=false отправляем ($.post), иначе не отправляем

denisOgr 18.10.2010 00:32

Спасибо ,walabyn ,за ответ. Сделал.
Скажите, я новичек в js(jqueru), но хорошо знаю php. Как можно проверять скрипт на ошибки. а то он просто не выполняется и все. Например в php выдается какая ошибка и номер строки.
а здесь как посмотреть?

walabyn 18.10.2010 00:44

в php-обработчике (который на экшене) делаете обработку и ошибки или успехи заносите в ассоциативный массив, допустим, $mess, а в самом конце делаете echo json_encode($mass); и когда вы передаете переменную data в функцию ответа jquery, то обращение к элементам этого массива будет например data.error

только зачем проверять ошибки на стороне jQuery? там же нету сложных скриптов... или я что-то не понял) я описал ситуацию когда мы транслируем в jQuery ошибки из php

denisOgr 18.10.2010 02:15

нет мне нужно не транслятор в jQuery ошибки из php. а ошибки jQuery выводились

ну например кода я написал $(this).attr(rel);у меня скрипт не шел дальше, я ломал голову в чем проблема, а потом понял что нужно $(this).attr("rel"); кавычки забыл

было бы хорошо если бы написал бы об ошибки разработчик или что то еще чтоли
Например в 5-ой строке в .....attr(rel) есть ошибка. возможно забыли поставить кавычки.
как в php пишут.

walabyn 18.10.2010 02:30

увы, в яваскрипте этого нет)

sysya 18.10.2010 19:40

Вообще есть firebug для firefox'а, он выводит ошибки и вообще сделан для удобства разработчика. В опере есть вывод консоли ошибок и так далее... Почти у каждого браузера есть свои настройки для вывода ошибок в коде javascript. Хотя если есть лишние деньги, вам плагин по отлову ошибок для jQ напишут :)


Часовой пояс GMT +3, время: 00:08.