2009-08-28 2 views
70

Я хочу создать тег привязки, который выполняет некоторый JavaScript, а затем переходит к тому, куда его принимал href. Вызов функции, которая выполняет мой JavaScript, а затем устанавливает window.location или top.location в href, не работает для меня.HTML-привязка - href и onclick оба?

Итак, представьте, что у меня есть элемент с идентификатором «Foo» на странице. Я хочу, чтобы автор якорь, похожий на:

<a href="#Foo" onclick="runMyFunction(); return false;">Do it!</a> 

Когда нажата, я хочу, чтобы выполнить runMyFunction, а затем перейти на страницу #Foo (не вызывает перезагрузку - с помощью top.location бы вызвать его, чтобы перезагрузить страницу).

Предложения? Я рад использовать jQuery, если это может помочь здесь ...

+0

'return true;' это решение, но вы также можете вызвать 'location.hash = '# Foo''. Он не перезагрузит страницу. – shuangwhywhy

ответ

110

Только return true вместо этого?

Возвращаемое значение из onClick кода, что определяет, обрабатывается ли присущая клика действие по ссылке или нет - возвращение false означает, что он не обрабатывается, но если вы вернетесь true, то браузер будет продолжаться обработать его после того, как ваши функция возвращается и переходит к соответствующему якорю.

+0

Что делать, если onclick ничего не возвращает? – maciek

+1

@maciek, тогда возвращаемое значение рассматривается как 'undefined', которое считается ложным для этих целей. – Amber

+1

В прошлом, когда я использовал функцию js для запуска новой страницы и добавлял только «#» для атрибута href, я бы возвращал «-1», чтобы предотвратить действие по умолчанию, которое обычно является браузером прыгая на вершине страницы, или иногда я просто ничего не возвращаю. В последнее время мне пришлось пересмотреть все эти страницы, как @Amber посоветовал ... специально вернуть false, если я не хочу, чтобы страница прыгала. – Randy

7

Если ссылка должна только изменить местоположение, если функция выполнена успешно, то выполните onclick="return runMyFunction();", а в функции вы вернете true или false.

Если вы просто хотите запустить функцию, а затем пусть тег привязки выполняет свою работу, просто удалите оператор return false.

В качестве побочного примечания вы, вероятно, должны использовать обработчик событий, так как встроенный JS - не очень оптимальный способ делать вещи.

23
<a href="#Foo" onclick="return runMyFunction();">Do it!</a> 

и

function runMyFunction() { 
    //code 
    return true; 
} 

Таким образом, вы будете иметь youf функция выполнена, и вы будете следовать по ссылке и вы будете следовать по ссылке именно после того, как ваша функция была успешно работать.

+0

Кажется не работает, если ваша функция возвращает true после вызова функции отложенной функции? – DavidVdd

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