Обновляется окно при клике, как убрать?

Есть скрипт

function shops(elt) {
    $('#'+$(elt).data('id')).fadeIn();
};
$(function($) {
    $('.popup-order').find('.close').on('click',function() {
        $('.popup-order').fadeOut();
    });
    $('.popup-order').on('click',function(e) {
        if ($(e.target).hasClass('popup-order')) $(this).fadeOut();
    });
});

Он привязан к ссылке:

<a href="" class="close" title="Закрыть"></a>

При клике на ссылку в появившемся окне происходит обновление страницы и окно закрывается. Необходимо убрать обновление страницы при клике.

  1. Навесить return false не сработало
  2. Убрать href отключает полностью ссылку, как и если прописать ссылке ##
  3. Заменить ссылку на span не работает
  4. Навесить onclick сразу в ссылке с отменой не работает
  5. Указать e.preventDefault(); не работает
  6. Указать javascript:void(0) не работает

Ответы (1 шт):

Автор решения: Evgeniy Leonidov

Вы не дали полный пример кода, и остаётся только гадать, почему у вас не работают решения, которые обязаны работать. Одной из причин, по которой e.preventDefault(); не работает, может быть то, что событие не передается в функцию обработчика событий или оно не корректно определяется в вашем коде.

Вот примерное решение, на основе вашего кода:

$(function($) {
    $('.popup-order').find('.close').on('click', function(e) {
        e.preventDefault(); 
        $('.popup-order').fadeOut();
    });
    $('.popup-order').on('click', function(e) {
        if ($(e.target).hasClass('popup-order')) {
            e.preventDefault(); 
            $(this).fadeOut();
        }
    });
});

function shops(elt) {
    elt.preventDefault(); 
    var id = $(elt.target).data('id'); // Если elt - это event объект, иначе используйте $(elt).data('id')
    $('#' + id).fadeIn();
};

Если вы используете onclick="shops(this);" в HTML, вам нужно будет изменить способ передачи события и обработки, возможно, передавать event в shops функцию и обрабатывать его аналогично.

→ Ссылка