как остановить # ссылки, вызывающие функции javascript, от перехода на верх страницы - PullRequest
16 голосов
/ 19 июля 2009

Как вам остановить мои ссылки вот так:

<a href="#" onClick="submitComment()">

От перехода на верх страницы после клика?

Ответы [ 7 ]

28 голосов
/ 19 июля 2009

Много раз вы увидите, как люди используют атрибут onclick, и просто return false в конце его. Хотя это работает надежно, это немного уродливо и может затруднить управление вашей кодовой базой.

<a href="#" onClick="submitComment(); return false;">

Отделите ваш HTML от вашего JavaScript

Это гораздо лучше для вас и вашего проекта, если вы отделите разметку от сценариев.

<a id="submit" href="enableScripts.html">Post Comment</a>

С помощью приведенного выше HTML мы можем найти этот элемент и подключить обработчик, когда пользователь нажимает на элемент. Мы можем сделать все это из внешнего файла .js, чтобы наш HTML оставался красивым и чистым, без каких-либо сценариев:

if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", setup, false);
} else if (document.attachEvent) {
    document.attachEvent("onreadystatechange", setup);
} else {
    document.onload = setup;
}

function setup () {
    var submit, submitComment;
    submit = document.getElementById("submit");
    submitComment = function (e) {
        e = e || window.event;
        e.preventDefault();
        alert("You clicked the link!");
    };
    if (submit.addEventListener) {
        submit.addEventListener("click", submitComment, false);
    } else if (submit.attachEvent) {
        submit.attachEvent("onclick", submitComment);
    } else {
        submit["onclick"] = submitComment;
    }
}

В вышеприведенном коде многое происходит, но давайте пробежимся по нему с высоты 30 000 футов. Мы начнем с выяснения того, как лучше всего настроить наш код, когда браузер загружает страницу. В идеале мы хотели бы сделать это, когда DOM будет готов.

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

Наша функция установки получает ссылку на этот якорь, создает функцию, которую мы будем запускать при щелчке якоря, а затем находит способ присоединить этот вызов функции к событию щелчка якоря - уже сходит с ума? Это безумие, с которым разработчики JavaScript уже давно сталкиваются.

С jQuery это намного проще

Возможно, вы слышали о jQuery и задавались вопросом, почему он так популярен. Давайте решим ту же проблему, но на этот раз с помощью jQuery, а не сырого ванильного JavaScript. Предполагая следующую разметку:

<a id="submit" href="enableScripts.html">Post Comment</a>

Единственный JavaScript, который нам нужен (благодаря jQuery), это:

$(function(){
    $("#submit").on("click", function(event){
        event.preventDefault();
        submitComment();
    });
});

Вот и все - это все, что нужно. jQuery обрабатывает все тесты, чтобы определить, с учетом вашего браузера, что лучше всего сделать это или то . Он берет все сложные вещи и убирает их с пути, чтобы вы могли быть креативными.

7 голосов
/ 19 июля 2009

Добавить возврат false. Я считаю, что без этого страница перезагрузится.

<a href="#" onClick="submitComment(); return false;">
1 голос
/ 23 сентября 2014

Попробуйте использовать:

<a href="#a" onclick="myFunction()">Javascript is sweet!</a>

Это закрепит страницу в том месте, где она находится. У меня была такая же проблема, и это было простым и хорошим решением для меня.

1 голос
/ 23 января 2014

Если вам не нужен якорь для фактического перехода куда-либо, вам вообще не нужно использовать ссылку "href =".

Попробуйте просто использовать <a id="stay-put">Submit Comment</a>

Тогда ваш javascript будет выглядеть так:

$("#stay-put").click(function(){
    submitComment();
});
1 голос
/ 17 августа 2012

Просто верните false при клике по гиперссылке

Она не будет прокручивать страницу вверх, т.е. она будет все еще там, где она есть

0 голосов
/ 12 февраля 2016

Другой простой способ -

<a href="javascript: void(0)" class="action-class">Link</a>

Тогда у вас мог бы быть отдельный код с событием onClick для класса "action-class" с любым фреймворком, который вам нравится, или простым JavaScript.

0 голосов
/ 19 июля 2009

Вместо этого вы можете использовать этот альтернативный синтаксис:

<a href="javascript:submitComment()">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...