Вы можете установить href в #!
вместо #
Например,
<a href="#!">Link</a>
не будет выполнять прокрутку при нажатии.
Осторожно! Это все равно добавит запись в историю браузера при щелчке, а это означает, что после нажатия вашей ссылки кнопка возврата пользователя не приведет их к странице, на которой они были ранее. По этой причине, вероятно, лучше использовать подход .preventDefault()
или использовать оба в комбинации.
Вот сценарий, иллюстрирующий это (просто попробуйте свой браузер до тех пор, пока ваш получить полосу прокрутки): http://jsfiddle.net/9dEG7/
Это поведение указан в спецификации HTML5 в разделе . Переход к разделу идентификатора фрагмента . Причина, по которой ссылка с href в "#"
заставляет документ прокручиваться вверх, заключается в том, что это поведение явно указано как способ обработки пустого идентификатора фрагмента:
2. Если
blockquote>fragid
является пустой строкой, указанная часть документа является верхней частью документаИспользование href из
"#!"
вместо этого работает просто потому что он избегает этого правила. В восклицательном знаке нет ничего волшебного - он просто делает удобный идентификатор фрагмента, потому что он заметно отличается от типичного хрупкого и вряд ли когда-либо сопоставим сid
илиname
элемента на вашей странице. Действительно, мы могли бы положить почти что-нибудь после хэша; единственными фрагментами, которых недостаточно, являются пустая строка, слово «верх» или строки, которые соответствуют атрибутамname
илиid
элементов на странице.Точнее, нам просто нужно идентификатор фрагмента, который заставит нас перейти к шагу 8 в следующем алгоритме для определения указанной части документа из fragid:
blockquote>
- Apply алгоритм парсера URL-адреса для URL-адреса и пусть fragid будет фрагментным компонентом результирующего проанализированного URL.
- Если
fragid
- пустая строка , то указанная часть документа является верхней частью документа; остановите алгоритм здесь.- Пусть
fragid bytes
является результатом процентного декодированияfragid
.- Пусть
decoded fragid
является результатом применения алгоритма декодера UTF-8 кfragid bytes
. Если декодер UTF-8 испускает ошибку декодера, отмените декодер и вместо этого перейдите к шагу с меткойno decoded fragid
.- Если в DOM есть элемент, который имеет ID, точно равный
decoded fragid
, то первым таким элементом в древовидном порядке является указанная часть документа; остановите алгоритм здесь.- Не декодировано fragid : Если в DOM есть элемент, у которого есть атрибут имени, значение которого точно равно
fragid
( notdecoded fragid
), то первым таким элементом в древовидном порядке является указанная часть документа; остановите алгоритм здесь.- Если fragid является ASCII-регистрозависимым совпадением для строки
top
, то указанная часть документа является верхней частью документа; остановите алгоритм здесь.- В противном случае указана не какая-либо часть документа.
Пока мы нажимаем на шаге 8 и там не указано в документе , вступает в игру следующее правило:
Если нет указанной части ... тогда пользовательский агент ничего не должен делать.
blockquote>, поэтому браузер не просматривает.
Вы должны изменить
<a href="#">My Link</a>
на
<a href="javascript:;">My Link</a>
. Таким образом, когда нажимается ссылка, страница не будет прокручиваться вверх. Это более чистое, чем использование href = "#", а затем предотвращение запуска по умолчанию.
У меня есть веские причины для этого в первом ответе на этот вопрос , например return false;
не будет выполняться, если вызываемая функция выдает ошибку или вы можете добавить функцию return false;
к функции doSomething()
, а затем забудьте использовать return doSomething();
При вызове функции следуйте этому примеру return false
:
<input type="submit" value="Add" onclick="addNewPayment();return false;">
Создайте страницу, содержащую две ссылки: одну вверху и одну внизу. При нажатии на верхнюю ссылку страница должна прокручиваться вниз до нижней части страницы, где присутствует нижняя ссылка. При нажатии на нижнюю ссылку страница должна прокручиваться до верхней части страницы.
Если вы можете просто изменить значение href
, вы должны использовать:
<a href="javascript:void(0);">Link Title</a>
Еще одно опрятное решение, с которым я только что придумал, - это использовать jQuery, чтобы остановить действие click. страницы для прокрутки, но только для ссылок href="#"
.
<script type="text/javascript">
/* Stop page jumping when links are pressed */
$('a[href="#"]').live("click", function(e) {
return false; // prevent default click action from happening!
e.preventDefault(); // same thing as above
});
</script>
Для Bootstrap 3 для коллапса, если вы не укажете цель данных на якоре и не полагаетесь на href для определения цели, событие будет предотвращено. Если вы используете цель данных, вам нужно будет предотвратить это событие самостоятельно.
<button type="button" class="btn btn-default" data-toggle="collapse" data-target="#demo">Collapse This</button>
<div id="demo" class="collapse">
<p>Lorem ipsum dolor sit amet</p>
</div>
Кроме того, вы можете использовать event.preventDefault внутри атрибута onclick.
<a href="#" onclick="event.preventDefault(); doSmth();">doSmth</a>
Не нужно писать событие exstra click.
Возврат false из кода, который вы вызываете, будет работать, и в ряде случаев это предпочтительный метод, но вы также можете это сделать
<a href="javascript:;">Link Title</a>
. Когда дело доходит до SEO, это действительно зависит от того, что ваша ссылка будет использована для. Если вы собираетесь использовать его для ссылки на какой-либо другой контент, то я бы согласился в идеале, что вы хотите что-то значимое здесь, но если вы используете ссылку для функциональных целей, возможно, например, Stack Overflow делает для панели сообщений (жирный, курсив, гиперссылка , и т. д.), то это, вероятно, не имеет значения.
<a onclick="yourfunction()">
это будет работать нормально. нет необходимости добавлять href = "#"
Попробуйте следующее:
<a href="#" onclick="return false;">My Link</a>
Легким подходом является использование этого кода:
<a href="javascript:void(0);">Link Title</a>
Этот подход не заставляет обновлять страницу, поэтому полоса прокрутки остается на месте. Кроме того, он позволяет программно изменять событие onclick и обрабатывать привязку к стороне клиента с помощью jQuery.
По этим причинам вышеприведенное решение лучше, чем:
<a href="javascript:myClickHandler();">Link Title</a>
<a href="#" onclick="myClickHandler(); return false;">Link Title</a>
, где последнее решение позволит избежать проблемы с прокруткой, если и только если метод myClickHandler не завершился неудачей.
Ссылка на что-то более разумное, чем верхняя часть страницы в первую очередь. Затем отмените событие по умолчанию.
См. правило 2 прагматического прогрессивного улучшения .
Возможно, вы захотите проверить свой CSS. В примере здесь: https://css-tricks.com/the-checkbox-hack/ есть position: absolute; top: -9999px;
. Это особенно неприятно для Chrome, так как onclick="whatever"
все еще перескакивает в абсолютное положение щелкнутого элемента.
Удаление position: absolute; top: -9999px;
, для display: none;
может помочь.
Вы можете просто написать так же: -
<a href="#!" onclick="function()">Delete User</a>