Проверка полей отправляемой формы.
Добрый день. Вопрос по проверке полей форм. Есть страница на которой много форм. это аукцион, форма с возможностью сделать ставку.
Мне нужно что бы при заполенении текстового(цифра ставки) при нажатии сделать ставку эта форма проверялась и если все хорошо то оправлялась. Проблема как провериь значение 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-очень класная штука. но иногда так "выводит") В чем проблемы помогите товарищи!( |
хм.. гетом отправляешь форму.. может стоит постом отправлять?
но в любом случае у 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), иначе не отправляем |
Спасибо ,walabyn ,за ответ. Сделал.
Скажите, я новичек в js(jqueru), но хорошо знаю php. Как можно проверять скрипт на ошибки. а то он просто не выполняется и все. Например в php выдается какая ошибка и номер строки. а здесь как посмотреть? |
в php-обработчике (который на экшене) делаете обработку и ошибки или успехи заносите в ассоциативный массив, допустим, $mess, а в самом конце делаете echo json_encode($mass); и когда вы передаете переменную data в функцию ответа jquery, то обращение к элементам этого массива будет например data.error
только зачем проверять ошибки на стороне jQuery? там же нету сложных скриптов... или я что-то не понял) я описал ситуацию когда мы транслируем в jQuery ошибки из php |
нет мне нужно не транслятор в jQuery ошибки из php. а ошибки jQuery выводились
ну например кода я написал $(this).attr(rel);у меня скрипт не шел дальше, я ломал голову в чем проблема, а потом понял что нужно $(this).attr("rel"); кавычки забыл было бы хорошо если бы написал бы об ошибки разработчик или что то еще чтоли Например в 5-ой строке в .....attr(rel) есть ошибка. возможно забыли поставить кавычки. как в php пишут. |
увы, в яваскрипте этого нет)
|
Вообще есть firebug для firefox'а, он выводит ошибки и вообще сделан для удобства разработчика. В опере есть вывод консоли ошибок и так далее... Почти у каждого браузера есть свои настройки для вывода ошибок в коде javascript. Хотя если есть лишние деньги, вам плагин по отлову ошибок для jQ напишут :)
|
Часовой пояс GMT +3, время: 23:13. |