return false - блокирует все ссылки на странице

0

Проблема в том, что при открытии страницы поиска все ссылки неактивны. Итак, я обнаружил, что проблема возникла из этого кода JQUERY:

var shouldShow = $.cookie('show_desc') == 'yep';
            if( shouldShow ) { $('#searchunder').show(); $('body').animate({ paddingTop: 80 }); }
            else {             $('#searchunder').hide(); $('body').animate({ paddingTop: 25 }); }

        // shows the group_desciption on clicking the noted link
        $('#search').click(function() {
            $('body').animate({ paddingTop: 80 });
            $('#searchunder').show('fast');
            $.cookie('show_desc', 'yep');
            return false;
        });
        // hides the group_desciption on clicking the noted link
        $('#close').click(function() {
            $('body').animate({ paddingTop: 25 });
            $('#searchunder').hide('fast');
            $.cookie('show_desc', 'nope');
            return false;
        });

Если я добавлю //return false; ссылки работают. Но если я удалю return false; моя панель поиска запрещена, а затем открывается снова. Итак, каково будет решение?

  • 0
    Можете ли вы предоставить jsFiddle?
  • 0
    Какова структура HTML?
Показать ещё 2 комментария
Теги:
cookies
prestashop

1 ответ

1

В обработчике jQuery return false делает две вещи: останавливает распространение и предотвращает действие по умолчанию.

Единственный способ, которым код, который вы показывали, может помешать соблюдению ссылок, был бы, если бы они находились в #search и/или #close. Если это проблема, вы можете решить ее так:

$('#search').click(function() {
    if (!$(e.target).closest('a')[0]) { // Check if click was on 'a' element
        $('body').animate({ paddingTop: 80 });
        $('#searchunder').show('fast');
        $.cookie('show_desc', 'yep');
        return false;
    }
});

(И аналогично для #close.)

... который запускает только соответствующий код, если клик не был a элементе.

Примечание: выше, предполагает, что #search и #close не являются сами по себе, элементы и что они не находятся в a a элементов. Например, они содержат ссылки, но не являются ссылками и не связаны ссылками. Это тоже можно решить, для этого просто требуется еще немного кода: вместо

if (!$(e.target).closest('a')[0]) { // Check if click was on 'a' element

это было бы

if (!$(e.target).parentsUntil(this).filter('a')[0]) { // Check if click went through an 'a' element en route to us
  • 0
    Спасибо за ваш ответ. Ну, есть некоторые +, но также -. После добавления этого if (! $ (E.target) .closest ('a') [0]) {. щелчок события не работает. не открывать и не закрывать! Однако ссылки на странице сейчас активны. Итак, почему не работает событие функции?
  • 0
    @AndrewS: Вы видели бит в конце? Это может быть ... Если нет, то будет нечто подобное. По сути, вы просто хотите , чтобы убедиться , что вы не обрабатываете щелчок , что пузыри до этих элементов , если что нажмите прошел через ссылку, но вы хотите в противном случае. :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню