2009-08-28 5 views
70

일부 JavaScript를 실행하는 앵커 태그를 작성한 다음 href이 가져가는 모든 위치로 이동하려고합니다. 내 JavaScript를 실행 한 다음 window.location 또는 top.locationhref 위치로 설정하는 함수를 호출하면 작동하지 않습니다.HTML 앵커 링크 - href 및 onclick 둘 다?

페이지에 ID가 "Foo"인 요소가 있다고 가정 해 보겠습니다. (-이 페이지를 다시로드 원인이 top.location를 사용하여 다시로드가 발생하지)이 클릭하면

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

, 나는 runMyFunction을 실행 한 후 #Foo에 페이지를 이동하려면 : 나는 유사한 앵커을 제작하고자합니다.

제안 사항? 여기에 도움이 될 수 있다면 jQuery를 사용하게되어 기쁩니다 ...

+0

'return true;'가 해결책이지만'location.hash = '# Foo''도 호출 할 수 있습니다. 페이지를 다시로드하지 않습니다. – shuangwhywhy

답변

110

그냥 return true 대신에?

onClick 코드의 반환 값은 링크의 고유 클릭 된 작업을 처리할지 여부를 결정하는 것입니다 - false이 처리되지 않음을 의미 반환하지만 true을 반환하는 경우 다음 브라우저는 후 처리로 진행됩니다 함수가 반환하고 적절한 앵커로 이동합니다.

+0

onclick에서 아무 것도 반환하지 않으면 어떻게됩니까? – maciek

+1

@maciek 그런 다음 반환 값은 이러한 목적으로 false로 간주되는 '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