Прогрессивное улучшение HTML-меток в jQuery
У меня есть JQuery, который я написал, который должен найти конкретный <a>
пометить и изменить его поведение. Перед загрузкой jQuery <a>
Тег имеет атрибут href, который указывает на другую страницу. Я использую JQuery, чтобы изменить поведение <a>
тег, так что вместо того, чтобы указывать браузеру загружать эту другую страницу, вместо этого он запускает JavaScript при нажатии, который динамически загружает содержимое в <div>
который расположен в месте указателя мыши.
Так, например, у меня есть следующее:
JQuery, который я запускаю, делает следующее:
<a class="funk" href="http://example.com/page2.html">Link</a>
<div class="hidden bubble">Load this instead.</div>
$(document).ready(function(){
$('.bubble').hide()
$('.bubble').removeClass('hidden');
$('.funk').attr('href', '#');
$('.funk').click(function(e){ $('.bubble').show(); })
})
Проблема, с которой я столкнулся, заключается в следующем: всякий раз, когда пользователь нажимает на ссылку, браузер
href="#"
Атрибут и приводит прокрутки браузера в верхней части страницы. Каков наиболее "правильный" способ сделать мой сайт таким, чтобы браузер вообще не прокручивал его, а просто выполнял код jQuery, который я написал для события click?
3 ответа
Пусть функция "click" вернется false
, Это отменяет событие, и браузер не переходит по ссылке. В этом случае вы можете даже позволить href
атрибут в исходное значение.
$('.funk').click(function(e){
$('.bubble').show();
return false;
//--^
})
Чтобы быть на стороне сохранения, вы можете явно отменить событие:
e.preventDefault(); // no default action
e.stopPropagation(); // event doesn't bubble up or down in the DOM
Добавьте это к вашей функции клика:
$('.funk').click(function(e){
e.preventDefault();
e.stopPropagation();
$('.bubble').show();
});
Это будет делать то, что подразумевается под именами методов.
Вызов e.preventDefault()
в обработчике кликов. http://api.jquery.com/event.preventDefault/