Показать сообщение отдельно
  #8 (permalink)  
Старый 16.02.2015, 05:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сначала:

>проблема в том, что у меня стоит слайдер, который прокручивает окна с полями. Там 4 слайда и мне нужно что бы поля не проверялись всюду.

Тут была проблема перезагрузки. Теперь:

>при нажатии сабмита, в форм срабатывает экшн, который переносит все значения, которые были сделаны в инпутах на новую страницу

Теперь явно о новой странице.

Давайте так. Из всех пояснений, я могу только предполагать, что же все таки нужно. Пишу пример по предположениям, все в одном файле. Никаких перезагрузок, асинхронными запросами, где div - это какие-то ваши слайды, в которые я так понимаю должны помещаться новые формы на каждом шаге. Типа такого должно быть?

<?
//для РНР не ниже 5.4
//это имитация подключаемых форм каждого этапа, их элементов
$fld = [
    1 => '<input placeholder="Number" name="fld[]"><br><br><input placeholder="Number" name="fld[]">
          <input type="hidden" name="fld[]" value="1">',
         '<input placeholder="String" name="fld[]"><br><input placeholder="String" name="fld[]"><br>
          <input placeholder="Number" name="fld[]"><input type="hidden" name="fld[]" value="2">',
         '<input placeholder="String" name="fld[]"><br><br><input placeholder="Number" name="fld[]">
          <input type="hidden" name="fld[]" value="3">'
];

$chk = [
    ['flt'=>FILTER_VALIDATE_REGEXP, 'opt'=>['options'=>['regexp'=>'/^\d+$/']], 'err'=>1],
    ['flt'=>FILTER_VALIDATE_REGEXP, 'opt'=>['options'=>['regexp'=>'/^[a-z]+$/']], 'err'=>2]
];

$fields = [
    [$chk[0], $chk[0], $chk[1]],
    [$chk[0], $chk[0]],
    [$chk[1], $chk[1], $chk[0]],
    [$chk[1], $chk[0]]
];

if($_POST) {
    $val = array_map('trim', $_POST['fld']);
    $src = array_pop($val);
    if($e = checkForm($fields[$src], $val)) exit(json_encode(['err'=>$e]));
    exit(json_encode(['fld'=>$fld[$src+1]]));
}

function checkForm($fld, $val) {
    $err = null;
    foreach($fld as $k=>$v) {
        if(!$val[$k]) $err[$k] = getError(0);
        else if(!filter_var($val[$k], $v['flt'], $v['opt'])) $err[$k] = getError($v['err']);
        continue;
    }
    return $err;
}

function getError($e) {
    $err = ['Empty!', 'Only numbers!', 'Only letters!'];
    return $err[$e];
}
?>
<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<style>

</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script> 
$(function() {
    $('form').submit(function() {
        var f = $(this);
        $.post(location, f.serializeArray(), function(d) {
            if(d.err) {
                $.each(d.err, function(i, v) {
                    document.forms[0].elements[i].value = v;
                })   
            } else {
                f.html(d.fld+'<br><button>Send</button>');
            }
        }, 'json');
        return false;
    });
});
</script>     
</head> 

<body>
<p>ttttttttttt</p>
<div style="width:200px;height:100px;padding:20px;background:#eee">
    <form>
        <input placeholder="Number" name="fld[]"><br><input placeholder="Number" name="fld[]">
        <br><input placeholder="String" name="fld[]"><br>
        <input type="hidden" name="fld[]" value="0">
        <button>Send</button>
    </form>
</div>
<p>ttttttttttt</p>
</body> 
</html>
Ответить с цитированием