event.preventDefault () vs. return false.


질문

 

특정 이벤트가 발생한 후 다른 이벤트 핸들러가 실행되지 않도록하기를 원할 때 두 가지 기술 중 하나를 사용할 수 있습니다.예제에서 jQuery를 사용 하겠지만, 이것은 Plain-JS에도 적용됩니다.

1. event.preventDefault ()

$('a').click(function (e) {
    // custom handling here
    e.preventDefault();
});

2. 거짓을 반환합니다

$('a').click(function () {
    // custom handling here
    return false;
});

이벤트 전파를 중지시키는 두 가지 방법간에 중요한 차이점이 있습니까?

나를 위해, 거짓을 반환합니다.방법을 실행하는 것보다 더 간단하고 짧고 오류가 적을 수 있습니다.이 방법으로 올바른 케이싱, 괄호 등에 대해 기억해야합니다.

또한 메서드를 호출 할 수 있도록 콜백에서 첫 번째 매개 변수를 정의해야합니다.아마도,이 문제를 피하고 방지하는 이유가 있음을 방지하고 대신 extablault를 사용해야하는 몇 가지 이유가 있습니다.더 좋은 방법은 무엇입니까?


답변

 

jQuery 이벤트 핸들러 내에서 false를 반환하면 전달 된 jquery.event 객체에서 e.preventdefault 및 e.stoppropagation을 모두 호출하는 것과 효과적으로 동일합니다.

e.preventDefault ()는 기본 이벤트가 발생하지 않도록 할 수있게 해주는 E.StopPropagation ()이 이벤트가 버블 링되지 않도록 방지하고 False가 모두 수행됩니다.이 동작은 일반 (jQuery) 이벤트 핸들러와 다릅니다. 이벤트 핸들러는 특히 Return false가 버블 링에서 이벤트를 멈추지 않습니다.

출처 : John Resig.

event.preventDefault ()를 사용하여 HREF 클릭을 취소하려면 event.preventDefault ()를 사용하는 이점은 무엇입니까?



답변

내 경험에서 RETURN FALSE를 사용하여 event.preventDefault ()를 사용할 때 적어도 하나의 명확한 이점이 있습니다.앵커 태그에서 클릭 이벤트를 캡처하고 있으며 그렇지 않으면 사용자가 현재 페이지에서 멀리 탐색 할 수있는 경우 큰 문제가 될 것입니다.클릭 핸들러가 브라우저 탐색을 방지하기 위해 FALSE를 사용하는 경우 인터프리터가 RETURN 문에 도달하지 않을 가능성이 열리고 브라우저가 진행하여 앵커 태그의 기본 동작을 실행합니다.

$('a').click(function (e) {
  // custom handling here

  // oops...runtime error...where oh where will the href take me?

  return false;
});

event.preventDefault ()를 사용하는 이점은 핸들러의 첫 번째 줄로이를 추가 할 수 있으므로 함수의 마지막 줄에 도달하지 않은 경우에 관계없이 앵커의 기본 동작이 발생하지 않음을 보장합니다 (예 : 런타임 오류).~의

$('a').click(function (e) {
  e.preventDefault();

  // custom handling here

  // oops...runtime error, but at least the user isn't navigated away.
});


답변

이것은 "자바 스크립트"질문이라는 것처럼 그렇지 않습니다.jQuery의 디자인에 관한 질문입니다.

Juquery와 John Resig (Karim79의 메시지)로부터 이전에 연결된 인용문은 일반적으로 이벤트 핸들러의 방식의 소스 오해가되는 것처럼 보입니다.

팩트 : false를 반환하는 이벤트 핸들러는 해당 이벤트의 기본 조치를 방지합니다.이벤트 전파를 멈추지 않습니다.이벤트 핸들러는 Netscape Navigator의 옛날부터 항상 이런 식으로 작동했습니다.

MDN의 문서는 이벤트 핸들러에서 RETURN을 설명합니다.

jQuery에서 일어나는 일은 이벤트 핸들러에서 일어나는 일과 동일하지 않습니다.DOM 이벤트 리스너 및 MSIE "첨부 된"이벤트는 다른 문제입니다.

추가 읽기를 위해 MSDN 및 W3C DOM 2 이벤트 설명서의 AttachEvent를 참조하십시오.



답변

일반적으로 첫 번째 옵션 (exterDefault ())은 취할 수있는 것이지만, 당신이 어떤 맥락에서 당신이 어떤 목표가 있는지 알아야합니다.

연료 코딩은 return false에 대한 훌륭한 기사를 가지고 있습니다.vs event.preventDefault () vs event.stopPropagation () vs event.stopimmediatePropagation ().



답변

jQuery를 사용하는 경우, false를 반환하는 경우, 전화를 할 때 3 가지를 분리하고 있습니다.

  1. event.preventDefault();
  2. event.stopPropagation();
  3. Stops callback execution and returns immediately when called.

자세한 내용과 예제는 jQuery 이벤트를 참조하십시오. jquery 이벤트 : stop (mis)을 중지 (mis) false를 사용하여 false를 사용하십시오.



답변

하나의 요소에 대해 OnClick 이벤트에 많은 기능을 걸 수 있습니다.어떻게 거짓 하나가 마지막으로 발사 할 것이라고 확신 할 수 있습니까?다른 한편으로는 extelDefault는 요소의 기본 동작만을 확실히 방지합니다.

출처:https://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false