[javascript] JavaScript 링크 “#”또는 “javascript : void (0)”에 어떤 “href”값을 사용해야합니까?

다음은 JavaScript 코드를 실행하기위한 목적으로 만 링크를 작성하는 두 가지 방법입니다. 기능, 페이지로드 속도, 유효성 검사 등의 측면에서 어떤 것이 더 좋습니까?

function myJsFunc() {
    alert("myJsFunc");
}
<a href="#" onclick="myJsFunc();">Run JavaScript Code</a>

또는

function myJsFunc() {
    alert("myJsFunc");
}
 <a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a>



답변

사용 javascript:void(0)합니다.

세 가지 이유. #개발자 팀 사이 에서 사용을 권장하면 필연적으로 다음과 같은 함수의 반환 값을 사용하게됩니다.

function doSomething() {
    //Some code
    return false;
}

그러나 그들은 return doSomething()onclick에서 사용하는 것을 잊고 그냥 사용 doSomething()합니다.

피하는 두 번째 이유 는 호출 된 함수가 오류를 던지면 #최종 결과 return false;가 실행되지 않기 때문입니다. 따라서 개발자는 호출 된 함수에서 오류를 적절히 처리해야합니다.

세 번째 이유는 onclick이벤트 속성이 동적으로 할당 되는 경우가 있기 때문입니다 . 하나의 첨부 방법 또는 다른 방법으로 함수를 특별히 코딩하지 않고도 함수를 호출하거나 동적으로 할당하는 것을 선호합니다. 따라서 onclickHTML 마크 업의 내 (또는 무엇이든)는 다음과 같습니다.

onclick="someFunc.call(this)"

또는

onclick="someFunc.apply(this, arguments)"

를 사용 javascript:void(0)하면 위의 모든 두통을 피할 수 있으며 단점의 예를 찾지 못했습니다.

따라서 고독한 개발자라면 자신이 직접 선택할 수 있지만 팀으로 일하는 경우 다음 중 하나를 명시해야합니다.

를 사용 href="#"하여 onclick항상 return false;끝에 포함 하고 호출 된 함수가 오류를 발생시키지 않도록하고 함수를 동적으로 onclick속성에 첨부하면 오류를 발생시키지 않아야 합니다 false.

또는

사용하다 href="javascript:void(0)"

두 번째는 분명히 의사 소통하기가 훨씬 쉽습니다.


답변

둘 다.

실제 URL이 있으면 HREF로 사용하십시오. 링크를 마우스 가운데 버튼으로 클릭하여 새 탭을 열거 나 JavaScript가 비활성화되어 있으면 onclick이 실행되지 않습니다.

이것이 가능하지 않은 경우 최소한 JavaScript 및 적절한 클릭 이벤트 핸들러를 사용하여 앵커 태그를 문서에 삽입해야합니다.

나는 이것이 항상 가능하지는 않다는 것을 알고 있지만, 내 의견으로는 모든 공공 웹 사이트를 개발하기 위해 노력해야합니다.

확인 겸손한 자바 스크립트점진적 향상 (모두 위키 백과).


답변

수행 <a href="#" onclick="myJsFunc();">Link</a>하거나 <a href="javascript:void(0)" onclick="myJsFunc();">Link</a>또는 포함하는 어떤 다른 onclick속성을 – 좋아 다시 5 년 전,하지만 지금은 나쁜 관행이 될 수 있습니다. 이유는 다음과 같습니다.

  1. 그것은 유지하기 어려우며 확장하기 어려운 것으로 판명 된 눈에 띄는 JavaScript의 실천을 장려합니다. 이에 대한 자세한 내용은 Unobtrusive JavaScript 입니다.

  2. 엄청나게 지나치게 장황한 코드를 작성하는 데 시간을 투자하고 있습니다.이 코드는 코드베이스에 거의 이점이 없습니다.

  3. 원하는 결과를 달성하는 데 더 좋고, 쉽고, 유지 보수가 쉽고 확장 가능한 방법이 있습니다.

눈에 잘 띄지 않는 JavaScript 방식

href속성 이 전혀 없습니다 ! CSS를 올바르게 재설정하면 기본 커서 스타일이 누락되어 처리되므로 문제가되지 않습니다. 그런 다음 우아하고 눈에 거슬리지 않는 모범 사례를 사용하여 자바 스크립트 기능을 추가하십시오. 이는 자바 스크립트 로직이 마크 업 대신 자바 스크립트로 유지 될 때 유지 관리가 쉬워집니다. 이는 로직을 분리해야하는 대규모 자바 스크립트 애플리케이션 개발을 시작할 때 필수적입니다. 블랙 박스 구성 요소 및 템플릿. 이에 더 큰 규모의 자바 스크립트 응용 프로그램 아키텍처

간단한 코드 예

// Cancel click event
$('.cancel-action').click(function(){
    alert('Cancel action occurs!');
});

// Hover shim for Internet Explorer 6 and Internet Explorer 7.
$(document.body).on('hover','a',function(){
    $(this).toggleClass('hover');
});
a { cursor: pointer; color: blue; }
a:hover,a.hover { text-decoration: underline; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="cancel-action">Cancel this action</a>

블랙 박스 된 Backbone.js 예제

확장 가능하고 블랙 박스 처리 된 Backbone.js 구성 요소 예를 보려면이 작동하는 jsfiddle 예를 참조하십시오 . 우리가 눈에 거슬리지 않는 JavaScript 관행을 활용하는 방법에 주목하고, 적은 양의 코드에는 여러 구성 요소 인스턴스 간의 부작용이나 충돌없이 페이지에서 여러 번 반복 할 수있는 구성 요소가 있습니다. 놀랄 만한!

노트

  • 요소 에서 href속성을 생략하면 키 탐색을 a사용하여 요소에 액세스 할 수 없습니다 tab. tab키 를 통해 해당 요소에 액세스 하려면 tabindex속성을 설정 하거나 button대신 요소를 사용할 수 있습니다 . Tracker1의 answer 에서 언급했듯이 버튼 요소의 스타일을 일반 링크처럼 쉽게 지정할 수 있습니다 .

  • 요소 에서 href특성을 생략 a하면 Internet Explorer 6Internet Explorer 7a:hover스타일 을 적용하지 않으므로 a.hover대신 이를 통해 간단한 JavaScript shim을 추가했습니다 . href 속성이없고 우아한 저하가없는 것처럼 링크가 작동하지 않는 것처럼 완벽하게 괜찮습니다. 더 큰 문제가 생길 것입니다.

  • 자바 스크립트를 비활성화 한 상태에서 작업을 계속 수행하려면 Ajax 요청을 통해 또는 수동으로 작업을 수행하는 대신 수동으로 작업을 수행하는 일부 URL로 이동 a하는 href속성이 있는 요소 를 사용하십시오 . 이 작업을 수행하는 event.preventDefault()경우 버튼 클릭시 링크를 따라 가지 않는지 확인하기 위해 클릭 통화를 수행해야합니다. 이 옵션을 정상 성능 저하라고합니다.


답변

'#'사용자를 페이지 상단으로 다시 이동 시키므로 일반적으로으로 이동합니다 void(0).

javascript:; 또한 같은 행동 javascript:void(0);


답변

나는 정직하게 제안하지 않을 것입니다. 나는 <button></button>그 행동을 위해 양식화 된 것을 사용합니다 .

button.link {
  display: inline-block;
  position: relative;
  background-color: transparent;
  cursor: pointer;
  border: 0;
  padding: 0;
  color: #00f;
  text-decoration: underline;
  font: inherit;
}
<p>A button that looks like a <button type="button" class="link">link</button>.</p>

이런 식으로 onclick을 할당 할 수 있습니다. 또한 onclick요소 태그 의 속성을 사용하지 않고 스크립트를 통한 바인딩을 제안 합니다. 유일한 단점은 비활성화 할 수없는 이전 IE의 psuedo 3d 텍스트 효과입니다.


반드시 A 요소를 사용해야하는 경우 javascript:void(0);이미 언급 한 이유로 사용하십시오 .

  • onclick 이벤트가 실패하는 경우 항상 차단합니다.
  • 잘못된로드 호출이 발생하지 않거나 해시 변경을 기반으로 다른 이벤트를 트리거하지 않습니다.
  • 클릭이 실패 (온 클릭 발생)하는 경우 해시 태그로 인해 예기치 않은 동작이 발생할 수 있으며, 해당 동작이 적절하지 않은 경우이를 피하고 탐색 기록을 변경하려고합니다.

참고 :를 클릭하여 실제로 수행 할 작업을 나타내는 추가 표시기 역할을 할 수 0있는 문자열로 바꿀 수 있습니다 javascript:void('Delete record 123').


답변

첫 번째는 사용자가 JavaScript를 비활성화 한 경우 따라야 할 실제 링크입니다. JavaScript가 실행될 때 click 이벤트가 발생하지 않도록하려면 false를 반환해야합니다.

<a href="#" onclick="myJsFunc(); return false;">Link</a>

Angular2를 사용하면 다음과 같이 작동합니다.

<a [routerLink]="" (click)="passTheSalt()">Click me</a>.

여기를 참조하십시오 https://stackoverflow.com/a/45465728/2803344


답변

당신이 나에게 묻는다면;

“링크”에 JavaScript 코드를 실행하려는 목적이있는 경우 링크로 인정되지 않습니다. 오히려 JavaScript 함수가 결합 된 텍스트입니다. <span>태그가 onclick handler첨부 된 태그와 일부 기본 CSS를 사용하여 링크를 모방하는 것이 좋습니다 . 탐색을위한 링크가 있으며 JavaScript 코드가 탐색 용이 아닌 경우 <a>태그 가 아니어야합니다 .

예:

function callFunction() { console.log("function called"); }
.jsAction {
    cursor: pointer;
    color: #00f;
    text-decoration: underline;
}
<p>I want to call a JavaScript function <span class="jsAction" onclick="callFunction();">here</span>.</p>