HTML 앵커 링크-href와 onclick 둘 다?


93

일부 자바 스크립트를 실행하는 앵커 태그를 작성하고 href에서 가져 가는 곳으로 이동 합니다. 내 자바 스크립트 다음 세트를 실행하는 함수를 호출 window.location하거나 top.location받는 href위치 나를 위해 작동하지 않습니다.

페이지에 ID가 "Foo"인 요소가 있다고 가정 해 보겠습니다. 다음과 유사한 앵커를 작성하고 싶습니다.

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

이 버튼을 클릭하면 runMyFunction을 실행 한 다음 페이지를 점프합니다 #Foo(다시로드하지 않고 사용 top.location하면 페이지를 다시로드 함).

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


return true;솔루션이지만 location.hash = '#Foo'. 페이지를 다시로드하지 않습니다.
shuangwhywhy

답변:


133

그냥 return true대신?

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


1
onclick이 아무것도 반환하지 않으면 어떻게 되나요?
maciek

1
@maciek 그런 다음 반환 값은 undefined이러한 목적을 위해 false로 간주됩니다.
Amber

1
과거에는 js 함수를 사용하여 새 페이지를 시작하고 href 속성에 "#"만 입력 할 때마다 "-1"을 반환하여 기본 동작 (일반적으로 브라우저 점프)을 방지했습니다. 그가 페이지의 맨 위에 있거나 때로는 아무것도 반환하지 않을 것입니다. 최근에 @Amber가 권고 한대로 모든 페이지를 수정해야했습니다. 페이지가 점프하지 않도록하려면 구체적으로 false를 반환합니다.
Randy

1
@Amber는 onclick이 아무것도 반환하지 않으면 링크 고유의 클릭 작업이 처리되는 것처럼 보입니다.
iplus26

또한 클릭 이벤트 핸들러에서 event.preventDefault ()를 사용해서는 안됩니다.
루벤

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

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

이렇게하면 함수가 실행되고 링크를 따라 가고 함수가 성공적으로 실행 된 후에 정확히 링크를 따라갈 수 있습니다.


1
지연된 함수 호출 후 함수가 true를 반환하면 작동하지 않는 것 같습니까?
DavidVdd 2014

7

링크가 함수 실행이 성공한 경우에만 위치를 변경해야하는 경우 수행 onclick="return runMyFunction();"하고 함수에서 true 또는 false를 반환합니다.

함수를 실행하고 앵커 태그가 작업을 수행하도록하려면 return false명령문을 제거하면 됩니다.

참고로 인라인 JS는 작업을 수행하는 최적의 방법이 아니기 때문에 대신 이벤트 핸들러를 사용해야합니다.


0

깨끗한 HTML 구조를 할 때 이것을 사용할 수 있습니다.

//Jquery Code
$('a#link_1').click(function(e){
  e . preventDefault () ;
  var a = e . target ;
  window . open ( '_top' , a . getAttribute ('href') ) ;
});

//Normal Code
element = document . getElementById ( 'link_1' ) ;
element . onClick = function (e) {
  e . preventDefault () ;
  
  window . open ( '_top' , element . getAttribute ('href') ) ;
} ;
<a href="#Foo" id="link_1">Do it!</a>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.