Валидация работает, но форма отправляется.
Всем здравствуйте.
Как отменить отправку формы , если валидация не пройдена? У меня форма отсылается в любом случае. Ниже часть индексного файла
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src="js/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="js/jquery.validate.min.js"></script>
<script type="text/javascript" src="js/myscripts.js"></script>
<script src="http://jqueryvalidation.org/files/dist/additional-methods.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#formdata").on("click",function () { //это обработчик нажатия кнопки ОТПРАВИТЬ
$("#formdata").validate();
var data = $(this).serialize();
$.ajax({// инициализируем ajax запрос
type: 'POST', // отправляем в POST формате
url: 'obrabot.php', // путь до обработчика, у нас он лежит в той же папке
data: data, // данные для отправки
cache: false,
target: '#p1',
success: function (data) {
if (data ){
alert ("OKyjyuj");
$("#p1").text(data);
}
else
{
alert("no ok");
}
}
});
return false;
});
});
</script>
</head>
<body>
<div style="display: flex;">
<p>Введите чило: </p>
<form id="formdata" method="POST" action='obrabot.php' style="margin: 16px;">
<input name='int' type='int' /> <br /><br /><br />
<input type='submit' name='Submit' id="submitsend" value='Отправить' />
</form>
<p id="p1"></p>
</body>
</html>
Использую jQuery Validation Plugin Ниже файл myscript.js с правилами и сообщениями
$(document).ready(function(){
jQuery.validator.addMethod(
'regexp',
function(value, element, regexp) {
var re = new RegExp(regexp);
return this.optional(element) || re.test(value);
},
""
);
$("#formdata").validate({
rules: {
int: {
required: true,
minlength: 4,
maxlength: 4,
number : true,
regexp: '^[1-9]{1}[0-9]*$'
}
},
messages:{
int:{
required: "поле не заполнено или заполнено не верно",
minlength: "в поле должно быть минимум 4 символа",
maxlength: "В поле должно быть максимум 4 символа",
number : "В поле должны быть только цифры",
regexp: "Число не должно начинаться на ноль!!"
}
}
});
});
С английским туго )). |
Влад_имир,
$("#formdata").validate({submitHandler : тут ваш ajax должен быть http://jqueryvalidation.org/validate |
Решил , надо было $("#formdata").validate(); сразу после $(document).ready(function(){
вставить. |
Влад_имир,
строки 8 и 9 в первом коде лишние |
а без submitHandler не обойтись?
|
Цитата:
|
ниже часть файла- обработчика
<?
require 'function.php';
header("Content-type: text/plain; charset=utf-8");
/* header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false); */
$errors = array();
$str='';
$a=3456;
/* $zifra=0; */
if (isset($_POST['int'])) {$str = $_POST['int'];}
if (isset($_POST['int'])) {$zifra =(int) $_POST['int'];}
/* echo "Переменная \$zifra имеет тип - ". (gettype($zifra)). "<br/>"; */
if ($zifra <= 1000)
{
$errors[] = "Нельзя вводить число начинающееся с нуля!!";
/* echo "Нельзя вводить число начинающееся с нуля!!"; */
}
$arr1 = str_split($str);
print_r ($arr1);
$length_arr1=count($arr1);
print_r($lenght_arr1);
$result = array_unique($arr1);
$length_result=count($result);
/* print_r($result);
print_r($length_result); */
if ($length_result<$length_arr1)
{
$errors[] = "Нельзя вводить повторяющиеся цифры!!";
/* echo "Нельзя вводить повторяющиеся цифры!!"; */
}
if(isset($errors)){
foreach($errors as $msg){
echo $msg;
}
return false;
}
не пойму почему print_r($lenght_arr1); null? print_r($length_result); - работает |
Влад_имир,
ждите php специалистов |
Цитата:
|
если в браузере http://localhost:63342/as/index.php то останавливается на странице обработчика,зато валидация работает на клиенте.
а если http://as/ то без перезагрузки и форма все равно отправляется. В чем прикол РОНИ? |
| Часовой пояс GMT +3, время: 04:46. |