2014-03-31 5 views
0

Я сделал следующий вид. Когда я выбираю любой из параметров, автоматически прокручивается страница . Любые идеи, как я могу это исправить?Почему страница прокручивается, когда я отправляю форму?

Вот HTML код:

<form method="get" action=""> 
    <select id="training_session" name="lang" onchange=this.form.submit()> 
    <option value=""<?php if($_GET['lang'] === '') echo 'selected' ?>>[All languages]</option> 
    <option value="English" <?php if($_GET['lang'] === 'English') echo 'selected' ?>>English</option> 
    <option value="Portuguese"<?php if($_GET['lang'] === 'Portuguese') echo 'selected' ?>>Portuguese</option> 
    <option value="French"<?php if($_GET['lang'] === 'French') echo 'selected' ?>>French</option> 
    <option value="Italian"<?php if($_GET['lang'] === 'Italian') echo 'selected' ?>>Italian</option> 
    <option value="Japanese"<?php if($_GET['lang'] === 'Japanese') echo 'selected' ?>>Japanese</option> 
    </form> 
    <noscript><input type="hidden" value="filter"></noscript> 
+0

страница перезарядка. Итак, или (1) добавьте ajax-вызов и обновление (2) добавьте внутреннюю ссылку на новую страницу языка и вызовите my_translated_page.php # link_at_right_height – MrPk

ответ

2

страница не прокрутки вверх.

onchange=this.form.submit() 

Форма отправляет, а страница перезагружается.

Новая версия страницы загружается сверху.

+0

, чтобы не было исправления? – user3480148

+0

Мне просто не нравится, как он загружается снова – user3480148

+3

На самом деле нет разумного способа изменить язык всего содержимого на странице, не загружая всю страницу снова. – Quentin

1

Поскольку вы отправляете страницу, она перезагружается вверху.

Вот обходной путь:

Сначала получить позицию прокрутки перед отправкой и представить его с формой:

<form method="get" action=""> 
    <select id="training_session" name="lang" onchange="document.getElementById('sc_top').value=document.body.scrollTop;this.form.submit()"> 
    <option value=""<?php if($_GET['lang'] === '') echo 'selected' ?>>[All languages]</option> 
    <option value="English" <?php if($_GET['lang'] === 'English') echo 'selected' ?>>English</option> 
    <option value="Portuguese"<?php if($_GET['lang'] === 'Portuguese') echo 'selected' ?>>Portuguese</option> 
    <option value="French"<?php if($_GET['lang'] === 'French') echo 'selected' ?>>French</option> 
    <option value="Italian"<?php if($_GET['lang'] === 'Italian') echo 'selected' ?>>Italian</option> 
    <option value="Japanese"<?php if($_GET['lang'] === 'Japanese') echo 'selected' ?>>Japanese</option> 
    </select> 
    <input type='hidden' name='scrollTop' id='sc_top'/> 
    </form> 
    <noscript><input type="hidden" value="filter"></noscript> 

Затем измените body тег, чтобы установить эту позицию еще раз, когда страница загружена:

<body onload="document.body.scrollTop = <?=intval($_GET['scrollTop']);?>"> 
+0

@Quentin Это неправильно, я использую htmlentities по значению. –

+0

Это только мешает людям создавать элемент или атрибут, который принимает значение JavaScript в качестве значения. 'onload' уже использует JavaScript как значение, поэтому' htmlentities' не защищает вас от XSS. – Quentin

+0

@Quentin правый. Мы идем. –

Смежные вопросы