언제 JavaScript에서 '거짓을 반환'해야합니까?


답변:


88

종종와 같은 이벤트 처리기에서 onsubmitfalse를 반환하면 실제로 발생하지 않도록 이벤트에 알리는 방법입니다. 따라서이 onsubmit경우 양식이 제출되지 않았 음을 의미합니다.


10
이것은 페이지를 다시로드하지 않고 제출하는 AJAX 양식을 원할 때 특히 유용하지만 자바 스크립트를 사용할 수없는 경우 페이지를 제출하고 다시로드하여 작동합니다.
Dean Rather

10
이벤트 핸들러를 작성할 때 기본 조치를 막기 위해 false를 리턴하는 것은 실제로 과잉이며 깨지기 쉬운 코드로 이어질 수 있습니다. Douglas Neiner의 게시물에 대한 설명 및 예제 here fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marquis Wang

3
jQuery를 사용 event.preventDefault()하면이 기능 을 사용하는 것이 좋습니다 . 거짓 반환은 더 이상 사용되지 않으며 더 이상 항상 작동하지는 않습니다.
onetwopunch

1
때로는 return false메소드에 있습니다. 이것이 무엇을 변경합니까?
Francisco Corrales Morales

@onetwopunch 실제로 e.preventDefault ()로 변경하면 네임 스페이스 터치 이벤트를 기반으로 한 함수 중 하나의 문제가 해결되었습니다. 이유를 모르지만 당신은 나에게 아이디어를 주었다. 감사.
Garavani

69

나는 당신이 종종 '거짓을 돌려줘야한다'는 사실을 언급하고 있다고 추측합니다. 이벤트 핸들러의 문장, 즉

<a href="#" onclick="doSomeFunction(); return false;">...

'거짓을 돌려라' 이 경우 href = "#"로 표시된대로 브라우저가 현재 위치로 점프하는 것을 중지합니다. 대신 doSomeFunction () 만 실행됩니다. 앵커 태그에 이벤트를 추가하려고 할 때 유용하지만, 클릭 할 때마다 브라우저가 각 앵커로 위아래로 점프하고 싶지는 않습니다.


3
물론, 'href = "#"'는 나쁜 습관이지만 전반적인 요점은 여전히
Bobby Jack

4
@ vol7ron : 대안은 자바 스크립트가없는 사람들을위한 대안으로 작동하는 실제 URL입니다. 그렇지 않으면 아무 일도 일어나지 않는 링크를 클릭하기 만하면됩니다.
바비 잭

3
@ vol7ron : 물론 모든 개발자 (또는 사이트 소유자)가 원하는 사용자 기반의 양을 정확히 결정해야합니다. 그러나 이와 같은 경우 더 많은 사람들을 대상으로하는 옵션이 매우 간단한 경우, 왜이 옵션을 선택하지 않는지 알 수 없습니다. 또한 사람들이 자바 스크립트를 명시 적으로 비활성화하는 것이 아니라는 점을 명심하십시오. 그 결정에 영향을 미치는 다른 사람, JS 파일을 다운로드하는 네트워크 문제, JS 한 줄의 버그로 인해 실패 할 수 있습니다. 또한 마우스 오른쪽 버튼 클릭-> 새 탭에서 열기가 여전히 작동하면 아주 좋습니다.
Bobby Jack

사용자의 1 % 이상입니다. 많은 사람들이 이유로 NoScript와 같은 확장을 사용합니다. 의도적으로 자바 스크립트와 같은 기능을 해제합니다.
Sepero

@ vol7ron 고려해야 할 다른 시나리오는 "자바 스크립트가 중단 된"경우입니다 (페이지의 구문 오류로 인해). 비 js 폴 백이 있으면이 시나리오에 대한 안전망이 제공됩니다. (js 구문 오류로 인해 Google.com이 거의 30 분 동안 다운되었습니다!)
Alex Czarto

28

이벤트 전파 를 중지하는 데 사용됩니다 . click 이벤트 핸들러와 함께 두 가지 요소가 모두있는 경우 (예 :)

-----------------------------------
| element1                        |
|   -------------------------     |
|   |element2               |     |
|   -------------------------     |
|                                 |
-----------------------------------

내부 요소 (element2)를 클릭하면 1과 2 요소 모두에서 클릭 이벤트가 트리거됩니다. "이벤트 버블 링"이라고합니다. element2에서만 이벤트를 처리하려는 경우, 이벤트 핸들러는 이벤트 전파를 중지하기 위해 false를 리턴해야합니다.

또 다른 예는 링크 클릭 핸들러입니다. 링크 양식 작동을 중지하려는 경우. onclick 핸들러를 추가하고 false를 리턴 할 수 있습니다. 이벤트가 기본 핸들러로 전파되는 것을 중지합니다.


9
이 답변의 첫 번째 부분이 잘못되었습니다. false이벤트 처리기에서 복귀 하면 이벤트와 관련된 기본 동작이 방지됩니다. 전화 event.preventDefault()또는 설정 event.returnValue = false(IE)을 통해이 작업을 수행 할 수도 있습니다 . 이벤트가 버블 링되는 것을 막으려면 전화 event.stopPropagation()또는 설정 event.cancelBubble = true(IE)
Christoph


12

또한 'js,'return false '를 사용할 때 검색 한 후이 페이지를 방문했습니다. 다른 검색 결과 중에는 Chris Coyier의 CSS-Tricks 사이트에서 훨씬 더 유용하고 간단하게 발견 된 페이지가 있습니다. 'return false;'의 차이점 그리고 'e.preventDefault ();'

그의 기사의 요지는 :

function () {return false; }

// 동일하다

함수 (e) {e.preventDefault (); e.stopPropagation (); }

그래도 전체 기사를 읽는 것이 좋습니다.

업데이트 : return false 사용의 장점을 주장한 후; e.preventDefault ()를 대체합니다. & e.stopPropagation (); 내 동료 중 한 명이이 기사에서 설명한 것처럼 false 반환은 콜백 실행을 중지한다고 지적했습니다. jQuery Events : Return False 사용 중지 (Mis) .


나는 몇 가지 코드를 테스트 한 후 여기에 주목해야 :에 JQuery와 , function() { return false; }EQUAL하는 것입니다 function(e) { e.preventDefault(); e.stopPropagation(); },하지만 순수한 JS, 그것은 동일하지, function() { return false; }같은 IS function(e) { e.preventDefault(); }사실. 그것은 하지 않습니다 전파를 중지합니다.
SkuraZZ

6

jQuery의 each함수를 사용할 때 true 또는 false를 반환하는 것은 의미가 있습니다. 의사를 참조하십시오


3

더 나은 질문은 부울 반환 값 집합을 평가하는 경우 true / false를 사용하지 않는 이유입니다 . 내 말은, 당신은 아마 true / null, true / -1, 다른 기타를 가질 수 있습니다. 대체 할 자바 스크립트 "false"값이지만 왜 그렇게하겠습니까?


1

앵커 태그에서 자바 스크립트 코드를 트리거하려면 자바 스크립트 (pseudo-protocol) 대신 onclick 핸들러를 사용해야합니다. onclick 핸들러 내에서 실행되는 자바 스크립트 코드는 true 또는 false (또는 evalues가 true 또는 false 인 표현식)를 태그 자체로 다시 반환해야합니다. true를 반환하면 앵커의 HREF가 일반 링크처럼 따라옵니다. false를 반환하면 HREF가 무시됩니다. 이것이 "거짓을 돌려주는 이유"입니다. 은 종종 onclick 핸들러 내 코드의 끝에 포함됩니다.


1

return false를 사용하여 문제가 발생하지 않도록합니다. 따라서 제출시 스크립트를 실행하는 경우 false를 리턴하면 제출이 작동하지 않습니다.



1

기능에 착용 된 기능이 있거나 (일부 테스트에 의해) 일부 기능을 중지하려는 경우에만 false를 리턴하십시오. 예를 들어 "onsubmit"끝에 return false를 사용하십시오.


1

또한이 짧고 흥미로운 링크는 https://www.w3schools.com/jsref/event_preventdefault.asp를

정의와 사용법

preventDefault () 메소드는 이벤트가 취소 가능한 경우 이벤트를 취소합니다. 즉, 이벤트에 속하는 기본 조치가 발생하지 않습니다.

예를 들어, 다음과 같은 경우에 유용 할 수 있습니다.

Clicking on a "Submit" button, prevent it from submitting a form
Clicking on a link, prevent the link from following the URL

참고 : 모든 이벤트가 취소 가능한 것은 아닙니다. cancelable 속성을 사용하여 이벤트가 취소 가능한지 확인하십시오.

참고 : preventDefault () 메소드는 DOM을 통한 이벤트 전파를 막지 않습니다. 이를 처리하려면 stopPropagation () 메소드를 사용하십시오.


w3schools와 달리 developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault 를 사용하십시오 . 그러나 확실한 대답.
Bibberty 2019
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.