Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   При клике на кнопку переход к якорю и открытие блока (https://javascript.ru/forum/dom-window/60086-pri-klike-na-knopku-perekhod-k-yakoryu-i-otkrytie-bloka.html)

Galyanov 10.12.2015 15:38

При клике на кнопку переход к якорю и открытие блока
 
Здравствуйте!
Прошу помощи.
На сайте в шапке есть форма фильтра с кнопкой
<button type="submit" class="goresult" >Подобрать кондиционер</button>


Результаты сортировки фильтра выводятся в блоке ниже
section class="selection,
до применения фильтра там выводятся все записи без сортировки

Задача такая.
Изначально блок с записями скрывать, при клике по кнопке submit надо блок отображать и поднимать его вверх (прокручивать экран).

Как пробовал.
Поставил якорь перед блоком
<a name="result"></a>
Во-первых якорь срабатывает только если кнопку button обернуть ссылкой на якорь и плюс к тому же поставить такую ссылку рядом, ее приходится скрывать.
<a href="#result"><button type="submit" class="goresult" >Подобрать кондиционер</button></a> 
<a style="opacity:0;" href="#result">дублирующая</a>


Во-вторых когда поставил скрипт который отображает блок с записями при клике на кнопку, исчез переход к якорю.

<script>
function resu() {
  $('.selection').hide();

  $('.goresult').click(function(event) {
    event.preventDefault(); // Для того чтобы при нажатии на ссылку не кидало вверх
    $('.selection').slideToggle();
  });
resu(); 
</script>


Как заставить все это работать вместе и одновременно?

рони 10.12.2015 15:57

Galyanov,
$('.selection').slideToggle()[0].scrollIntoView();

Galyanov 10.12.2015 16:52

Спасибо!
Сделал вот так, только после прокрутки к блоку через несколько секунд блок опять исчезает и кидает наверх
<script>

$('.selection').hide();
$('.goresult').click(function(event) {
    $('.selection').slideToggle()[0].scrollIntoView();
  });

</script>


P.S.
А если повесить это событие не на клик кнопки?
У меня на странице есть код php который запускает функцию фильтрации если что то было передано из формы, может туда добавить как-то код?
<?php if ($_GET && !empty($_GET)) { // если было передано что-то из формы
             go_filter(); // запускаем функцию фильтрации
         } ?>

рони 10.12.2015 16:59

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

Galyanov 10.12.2015 17:21

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

Galyanov 10.12.2015 17:33

Отменить событие всмысле убрать скрытие?
Вот этим preventDefault() ?

<script>
$('.selection').hide();
$('.goresult').click(function(event) {
    $('.selection').slideToggle()[0].scrollIntoView().preventDefault();
  });
</script>


все равно кидает наверх и блок скрывается

рони 10.12.2015 17:42

Цитата:

Сообщение от Galyanov
Вот этим preventDefault() ?

строка 6 первый ваш пост

рони 10.12.2015 17:46

Galyanov,
и зачем кнопку в ссылку оборачивать? -- и функция сортировки должна скролл делать в конце

Galyanov 10.12.2015 17:47

Да, вот так заработало)
Однако при повторном нажатии на сабмит, блок скрывается...

<script>
$('.selection').hide();
$('.goresult').click(function(event) {
    event.preventDefault();
    $('.selection').slideToggle()[0].scrollIntoView();
    
  }); 
</script>


Т.е. по очереди, нажал - открылось, нажал закрылось.
А если повторно делать фильтрацию, как сделать чтобы уже открытое не закрывалось?

P.S. Обертыванеи я естественно уже убрал, раз функция есть)

Galyanov 10.12.2015 17:51

Блин, я рано радуюсь...
Открывает и скролит это да, но выборка перестала работать, показывает все записи без фильтрации...


Часовой пояс GMT +3, время: 21:57.