2010-01-18 4 views
21

Я создал функцию JavaScript, что я добавить к якорю как таковойJavascript якорь избежать прокрутки вверх по щелчку

JavaScript:

somefunction = function() {alert('foo')} 

HTML:

<a href="#" onclick="return somefunction()">anchor</a> 

каждый раз, когда я нажимаю на якоре функция выполняется, но экран прокручивается вверх

Я знаю, что смогу сделать это

<a href="javascript:void(0)" onclick="return somefunction()">anchor</a> 

, но я видел первый вариант реализован без этого захолустный вверх прокрутки вверх

есть ли трюк для него?

спасибо

ответ

46

OnClick вызывает страницу переразметить, поэтому прокрутка вверх.

Вам нужно событие onclick, чтобы вернуть false, чтобы избежать обратной передачи.

Это можно сделать, изменив функцию, чтобы вернуть ложное:

somefunction = function() {alert('foo'); return false;} 

Или изменить ссылку и OnClick событие, чтобы сделать так:

<a href="javascript:void(0)" onclick="somefunction(); return false;">anchor</a> 
2

Возвращение false из обработчика OnClick, например:

<a href="#" onclick="somefunction(); return false;">anchor</a> 
2

Вам необходимо сделать somefunction() return false, или вам нужно явно добавить return false в ваш обработчик onclick. Например:

<a href="#" onclick="somefunction(); return false;">anchor</a> 

Это будет иметь браузер игнорировать href часть ссылки, когда кто-то нажимает на нее.

4

Хитрость заключается в том, что ваш OnClick возвращает значение somefunction, так что, если вы убедитесь, что somefunction всегда return false, то событие будет возвращать ложь, а также, и отменить поведение по умолчанию якоря.

Так это должно решить вашу проблему:

somefunction = function() { alert('foo'); return false; } 

Но я должен отметить, что, когда есть ошибка где-то в somefunction, остальная часть JavaScript не будет выполняться, и браузер будет по-прежнему следовать ссылке #. Поэтому целесообразно использовать вместо этого javascript:void(0), так как это избавит вас от этой проблемы.

Смежные вопросы