JQuery предотвращает дефолт (), но все еще добавляет путь фрагмента к URL, не переходя к фрагменту - PullRequest
4 голосов
/ 20 марта 2012

Мой вопрос похож на этот, но ни один из ответов не решает мою проблему: Используйте JQuery protectDefault (), но все равно добавьте путь к URL-адресу

Когда пользователь щелкает ссылку на фрагмент, мне нужно удалить стандартное поведение перехода на фрагмент, но все же добавить фрагмент в URL. Этот код (взятый из ссылки) запустит анимацию, а затем добавит фрагмент в URL. Однако фрагмент затем перемещается к, что в моем случае нарушает мой сайт.

$("#login_link").click(function (e) {
    e.preventDefault();
    $("#login").animate({ 'margin-top': 0 }, 600, 'linear', function(){  window.location.hash =     $(this).attr('href'); });

});

Ответы [ 2 ]

8 голосов
/ 20 марта 2012

Обновляя хеш с помощью location.href, браузер автоматически перемещается к указателю. e.preventDefault() только отменяет поведение события по умолчанию, оно не влияет на другие методы изменения хеша, даже если они вызываются из одного и того же прослушивателя событий.

Вы можете использовать history.replaceState или history.pushState, чтобы изменить хеш без прыжка:

// Replaces the current history entry
history.replaceState(null, '', '#newhash');
0 голосов
/ 20 марта 2012

Вы запрещаете обработчик по умолчанию для элемента login_link, но вы специально устанавливаете window.location.hash, и это вызовет навигацию.У вас на самом деле есть якорь с именем вещи, которую вы устанавливаете в хэше?Если нет, то можете ли вы описать, как он ломает ваш сайт, чтобы «перейти» к якору на странице, когда он не существует?Обычно это не вызывает проблем.

...