JQuery щелчок по силам элемента привязки прокручивается вверх?

гиперссылки jQuery - значение href? текст] [1]

Я столкнулся с проблемой использования jquery и события click, привязанного к элементу привязки. [1]: гиперссылки jQuery - значение href? "This" Вопрос SO кажется дублирующим, и принятый ответ, похоже, не решает проблему. Извините, если это плохой этический этикет.

В моей функции .ready() у меня есть:

jQuery("#id_of_anchor").click(function(event) { //start function when any update link is clicked
        Function_that_does_ajax();
        });

и мой якорь выглядит следующим образом:

<a href="#" id="id_of_anchor"> link text </a> 

но при щелчке по ссылке функция ajax выполняется по желанию, но браузер прокручивается вверху страницы. нехорошо.

Я пробовал добавить:

event.preventDefault(); 

перед вызовом моей функции, которая делает ajax, но это не помогает. Что мне не хватает?

Осветление

Я использовал каждую комбинацию

return false;
event.preventDefault(); 
event.stopPropagation();

до и после моего вызова функции js ajax. Он по-прежнему прокручивается вверх.

Ответы

Ответ 1

Это должно работать, можете ли вы уточнить, что вы подразумеваете под "до"? Вы делаете это?

jQuery("#id_of_anchor").click(function(event) {
    event.preventDefault();
    Function_that_does_ajax();
});

Потому что должен работать в том смысле, что если он не работает, вы делаете что-то неправильно, и нам нужно будет увидеть больше кода. Однако, для полноты, вы также можете попробовать следующее:

jQuery("#id_of_anchor").click(function() {
    Function_that_does_ajax();
    return false;
});

ИЗМЕНИТЬ

Вот пример этой работы.

Две ссылки используют этот код:

$('#test').click(function(event) {
    event.preventDefault();
    $(this).html('and I didnt scroll to the top!');
});

$('#test2').click(function(event) {
    $(this).html('and I didnt scroll to the top!');
    return false;
});

И как вы можете видеть, они работают нормально.

Ответ 2

вы можете использовать javascript: void (0); в href.

Ответ 3

Как сказал Тилал выше:

<a id="id_of_anchor" href="javascript:void(0)" />

держит якорный тэг в правильном направлении, позволяет назначать обработчики кликов с помощью javascript и не прокручивать. Мы используем его просто по этой причине.

Ответ 4

Этот вопрос является скорее упражнением отладки, поскольку он заявил, что вы используете правильные функции из объект события jQuery.

В обработчике событий jQuery вы можете выполнить либо одну, либо обе из двух основных функций:

1. Предотвратите поведение элемента по умолчанию (A href= "#", в вашем случае):

jQuery("#id_of_anchor").click(function(evt) { 
  // ...
  evt.preventDefault(); // assuming your handler has "evt" as the first parameter
  return false;
}

2. Остановите событие от распространения на обработчики событий на окружающих элементах HTML:

jQuery("#id_of_anchor").click(function(evt) { 
  // ...
  evt.stopPropagation(); // assuming your handler has "evt" as the first parameter
}

Поскольку вы не получаете ожидаемого поведения, вы должны временно вывести вызов ajax, заменить его каким-либо безобидным кодом, например, установить значение формы или -shudder-alert ( "OK" ) и проверить, все ли вы прокручиваете вверху.

Ответ 5

$("#id_of_anchor").click(function(event) { 
  // ...
  return false;
}

Ответ 6

просто потеряйте

href="#"

В теге html... что заставляет веб-страницу "вскакивать".

<a id="id_of_anchor"> link text </a>

и не забудьте добавить

cursor: pointer;

для вашего css, чтобы он выглядел как ссылка на mouseover.

Удачи.

Ответ 7

У меня такая же проблема.

Я думаю, что это происходит, когда вы привязываете событие до добавления этого элемента в DOM.

Ответ 8

Это очень помогло мне с приведенным ниже кодом. Спасибо!

        $(document).ready(function() {
        $(".dropdown dt a").click(function(event) {
        event.preventDefault();
            $(".dropdown dd ul").toggle('slow');
        });           
        $(".dropdown dd ul li a").click(function(event) {
        event.preventDefault();
            $(".dropdown dd ul").hide();
        });
    });