Пустой хэш URL-адреса заставляет страницу переходить на события js

У меня есть галерея фотографий с кнопками «Далее» и «Предыдущий». Если один из моих методов javascript по той или иной причине не работает, при нажатии одной из кнопок он добавит хэш к URL-адресу, например www.google.com# . Я знаю, что хешу можно присвоить идентификатор div для перехода к этой части страницы, но когда он пуст, он несколько раз прыгает по моей странице, и я не уверен, на что он нацелен. Я думал о попытке удалить хэш из URL-адреса, но тогда мне пришлось бы обеспечивать это при каждом действии, и это кажется плохой практикой. Я бы предпочел, чтобы хеш просто не влиял на действия на странице.


person JewrassicPark    schedule 01.11.2013    source источник
comment
«Пустой хэш» обычно переводит окно браузера в начало страницы.   -  person putvande    schedule 01.11.2013
comment
Прочитайте это: stackoverflow.com/questions/1357118 / звучит так, будто вам нужно предотвратить событие по умолчанию.   -  person Nick R    schedule 01.11.2013
comment
Я знаю о предотвращении значения по умолчанию, но если хэш в теге привязки href неправильный, его легче изменить, чем прикрепить обработчики для предотвращения значения по умолчанию для всего. Моя самая большая проблема - сломанный javascript, поэтому я не хочу использовать js для ее решения, если могу этого избежать.   -  person JewrassicPark    schedule 01.11.2013


Ответы (3)


Не используйте href="#", это неправильно.

Вместо этого используйте href="javascript:;" или его вариант (лично я использую javascript:void(null);)
Это явно указывает, что ссылка не ведет в другое место, а обрабатывается JavaScript.

person Niet the Dark Absol    schedule 01.11.2013
comment
Это то, о чем я беспокоился. Я знаю, что в какой-то момент все было установлено на href='/', а теперь большинство из них href='#', но изменить его, вероятно, было бы самым простым решением. - person JewrassicPark; 01.11.2013
comment
Я не понимаю, как href="#" будет неуместным, это просто ссылка на закладку. Использование href="javascript:;" не сообщает браузеру, что сценарий обрабатывает действие, он запрашивает у сценария в href место для перехода. Поскольку скрипт имеет значение undefined, браузер не может никуда перемещаться. - person Guffa; 01.11.2013

Я предполагаю, что кнопка Next And Prev имеет разметку, похожую на <a href="#" ...</a>. В этом случае вы можете добавить прослушиватель событий к этим ссылкам с помощью jquery.

$('#prev, #next').on({
    'click': function(e) {
         e.preventDefault();
     }
})

и избегайте изменения местоположения браузером. Или в чистом javascript:

document.querySelectorAll('#prev, #next').addEventListener('click', function(e) {
    e.preventDefault();
},false)
//Note: this code is not cross-browser
person Glen Swift    schedule 01.11.2013

Не используйте тег привязки, если вы не хотите выполнять функцию навигации. Используйте 1_

person Adam    schedule 01.11.2013