Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.03.2015, 18:03
Интересующийся
Отправить личное сообщение для sones Посмотреть профиль Найти все сообщения от sones
 
Регистрация: 21.03.2015
Сообщений: 10

плавный скролинг при нажатии кнопки на форме
Приветствую, есть форма, которая находится чуть ниже центра страницы, пхп обработчик на этой же странице, необходимо, что бы при нажатии кнопки "войти" происходил плавный скролл к якорю перед формой. Ниже - код и демо как сделал, но при таком варианте игнорируется пхп обработчик, и радио кнопки не работают. При нажатии на любой элемент формы - тупо скролит вниз и ничего не происходит
http://avzp.com.ua/1/test.php
<html>
    <head>
        <title>123</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        </head>
    <body>    
<br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>

<div id="form"></div>

<form class="form scroll" action="#form" id="auth" method="post"> 
<input name="login" id="login" class="textbox" placeholder="login:" type="text" maxlength="30"/><br><br>
<input name="pass" id="pass" class="textbox" placeholder="pass" type="password" maxlength="30"/><br>
<p>
<label for="sch"><input type="radio" checked="checked" name="chs" value="sch" id="sch"/>opt1</label><br/>
<label for="th"><input type="radio"  name="chs" value="th" id="th"/>opt2</label><br/>
</p>
<input class="button" type="submit" value="enter"></a>&nbsp;&nbsp;&nbsp; <a href="registration">reg</a>
</form>
<br />

<?
if(isset($_POST['login']) && isset($_POST['pass']))
{
   echo "проверки, авторизации и т.д.";    
}
?>

<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>

<script>
        $('.scroll').click(function(event) {
            event.preventDefault();
            var href=$(this).attr('action');
            var target=$(href);
            var top=target.offset().top;
            $('html,body').animate({
              scrollTop: top
            }, 1000);
            });
</script>        
    </body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 21.03.2015, 18:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

РНР никакого отношения к прокрутки страницы не имеет, вы же не значение ее передаете серверу, а форму. Прокручена она была или нет, серверу до этого нет никакого дела.

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

Последний раз редактировалось laimas, 21.03.2015 в 18:51.
Ответить с цитированием
  #3 (permalink)  
Старый 21.03.2015, 18:55
Интересующийся
Отправить личное сообщение для sones Посмотреть профиль Найти все сообщения от sones
 
Регистрация: 21.03.2015
Сообщений: 10

Я просто не стал выводить весь обработчик. При удачной авторизации идет редирект на другую страницу. Только я не совсем понял к чему это.
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2015, 19:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Что к чему, редирект? Как один из способов защиты от F5. Если при этом у вас он производится передачей заголовка, то его не произойдет, потому как будет ошибка, причиной которой является вывод в браузер до обработчика формы.
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2015, 20:36
Интересующийся
Отправить личное сообщение для sones Посмотреть профиль Найти все сообщения от sones
 
Регистрация: 21.03.2015
Сообщений: 10

Редирект происходит не передачей заголовка а обычным document.location.href, в самом конце пхп обработчика, после всех проверок на корректность данных. В данном примере который я описал выше - максимально упрощенный вариант, я не стал прописывать весь код обработчика так как Вы верно подметили:
Цитата:
РНР никакого отношения к прокрутки страницы не имеет
У меня в первом посте есть ссылка на страницу, где есть форма, при нажатии на кнопку оно красиво скролится (чего я и пытаюсь добиться) но обработчик формы не выполняется.
Ответить с цитированием
  #6 (permalink)  
Старый 21.03.2015, 20:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Да что вы пристали к этому скроллу, плевать сервер хотел на это, он об этом вообще не подозревает.

Если даже вы пишите по минимуму, то хотя бы пишите так, чтобы была видна логика работы, в противном случае ваш код говорит о том, что все чтобы не вводил пользователь все пропадает, так как при каждом запросе страницы выводится форма не важно от результатов ввода, и ее поля очищаются.

А по уму это

<?
if($_POST) {
//пришла форма, проверяем
//либо ошибки, либо ОК и переход
}

if(!$_POST() || $error) {
?>
<html>
....
И форма с определением значений полей формы при ошибках.

Вот такова должна быть логика, а будет у вас там скролл на странице, не будет это не важно.
Ответить с цитированием
  #7 (permalink)  
Старый 23.03.2015, 16:20
Интересующийся
Отправить личное сообщение для sones Посмотреть профиль Найти все сообщения от sones
 
Регистрация: 21.03.2015
Сообщений: 10

Не буду приводить весь код, переписал пол страницы, скролинг к нужному месту у меня в начале php обработчика:
<script> 
var scroll=$('#form').offset().top;
$('html, body').animate({scrollTop: scroll}, 400); 
</script>

Но тут получается, что если страница хоть немного прокручена вниз, то при клике сначала бросает наверх страницы, а потом плавно спускает к якорю.
Можно ли как-то offset'у задать, что бы он скролил от текущих координат?
Ответить с цитированием
  #8 (permalink)  
Старый 23.03.2015, 18:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Странный обработчик, если JS находится в начале, где ему как раз не место. И вообще, по чем вы конце концов щелкаете - в описании речь о кнопке "войти", которой в коде не видно, а обработчик установлен щелчку на форме? Теперь речь о щелчке и действии похожем на так "модное" href="#". В action="#form", который то в общем на сервер не передается.

Так что же вы делаете то на самом деле?
Ответить с цитированием
  #9 (permalink)  
Старый 23.03.2015, 19:04
Интересующийся
Отправить личное сообщение для sones Посмотреть профиль Найти все сообщения от sones
 
Регистрация: 21.03.2015
Сообщений: 10

// функция авторизации вначале которой слайдер
<?
fuction auth()
{
echo "<script>scroll();</script>";
...
проверки и т.д.
...
}
?>


<html>
...

//якорь
<div id="form"></div>

//форма
<form action="" method="post">
<input class="button" type="submit" value="enter">
...


//функция прокрутки
<script>
function scroll
{ 
var scroll=$('#form').offset().top;
$('html, body').animate({scrollTop: scroll}, 400); 
}
</script>


// обработчик по клику кнопки
<?
if(isset($_POST['submit']))
{
auth();
}
?>


Если страница не прокручена - все нормально, я нажимаю на кнопку - меня плавно отпускает у нужному месту, но:
Цитата:
если страница хоть немного прокручена вниз, то при нажатии на кнопку сначала бросает наверх страницы, а потом плавно спускает к якорю.
Я так понимаю, что из-за того, что сейчас offset().top (верх страницы)
Ответить с цитированием
  #10 (permalink)  
Старый 23.03.2015, 19:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Какую кнопу вы нажимаете, отправку формы? А если форма отправляется, то это что означает?
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена цвета/картинки фона при нажатии на элемент Webtest Элементы интерфейса 16 20.04.2017 22:36
Активация checkbox при нажатии на текст и изменение стиля у текста. ilyakor jQuery 2 10.06.2014 19:34
SyntaxHighlighter подсветка при нажатии faraday Общие вопросы Javascript 3 31.03.2012 23:43
Поменять элемент матрицы при нажатии кнопки в другом фрейме Alexiy Общие вопросы Javascript 1 09.11.2011 11:49
Восстановление hidden field при нажатии кнопки Назад в браузере debugx Элементы интерфейса 1 19.10.2011 19:03