"javscript:void(0);" vs "return false" vs "preventDefault()"
링크가 아무것도 하지 않고 자바스크립트 작업에만 응답하기를 원할 때 링크가 페이지 상단 가장자리로 스크롤되는 것을 피하는 가장 좋은 방법은 무엇입니까?
을 하는 몇 가지 방법을 있습니다.은 모두 잘하는 것 .다. 모두 잘 작동하는 것 같습니다.
<a href="javascript:void(0)">Hello</a>
아니면
<a id="hello" href="#">Hello</a>
<script type="text/javascript>
$(document).ready(function() {
$("#toto").click(function(){
//...
return false;
});
});
</script>
그리고 심지어:
<a id="hello" href="#">Hello</a>
<script type="text/javascript>
$(document).ready(function() {
$("#toto").click(function(event){
event.preventDefault();
//...
});
});
</script>
당신은 어떤 조건을 선호하십니까? 왜? 어떤 조건을 선호하십니까?
추신: 물론 위의 예들은 당신이 jquery를 사용하고 있다고 가정하지만 무툴이나 프로토타입에 해당하는 것들이 있습니다.
바인딩:
javascript:
URL은 항상 피해야 할 공포입니다.- 인라인 이벤트 핸들러 속성도 훌륭하지는 않지만, 약간의 빠른 개발/테스트를 위해서는 괜찮습니다.
- 스크립트로부터의 바인딩, 마크업을 깨끗하게 유지하는 것은 일반적으로 베스트 프랙티스로 간주됩니다.jQuery는 이것을 권장하지만, 어떤 도서관이나 평범한 JS에서도 할 수 없는 이유는 없습니다.
응답:
- InjQuery
return false
둘 다를 의미합니다.preventDefault
그리고.stopPropagation
, 즉에 이 있는 가 다릅니다. - jQuery 는.
preventDefault
/stopPropagation
(IE다 (returnValue
/cancelBubble
).
단,
- 링크가 아닌 링크가 있습니다.그것은 어디에도 연결되지 않고 행동입니다.
<a>
이것을 위한 이상적인 마크업은 아닙니다.누군가가 마우스를 가운데 클릭하거나 북마크에 추가하거나 링크에 있는 다른 어포던스를 사용하려고 하면 잘못됩니다. - 가 합니다를 수 설정합니다.
#thatelementsid
링크 이름에서 요소 ID를 가져오는 데 방해되지 않는 스크립팅을 사용합니다.당신은 또한 냄새를 맡을 수 있습니다.location.hash
해당 요소를 열기 위해 문서 로드 시 링크가 다른 컨텍스트에서 유용해집니다. - 않으면,, 입니다처럼
<input type="button">
아니면<button type="button">
할 수 원한다면 CSS로 버튼이 아닌 링크처럼 스타일링 할 수 있습니다. - 하지만 IE와 Firefox에서는 버튼 스타일을 완전히 제거할 수 없는 측면이 있습니다.만,입니다.
<span>
대신.추가할 수 있습니다.tabindex
대부분의 브라우저에서 키보드로 액세스할 수 있도록 하는 속성입니다. 비록 이것은 제대로 표준화되어 있지는 않지만 말입니다.Space(공간) 또는 Enter(입력)과 같은 키 누름을 감지하여 활성화할 수도 있습니다.이것은 다소 불만족스럽지만, 여전히 꽤 인기가 있습니다. (그래서, 한가지 예로, 이것은 이렇게 합니다. - 다른
<input type="image">
기능이 버튼만을 것입니다 이것은 완벽한 시각 제어 기능이 있는 버튼의 접근성의 장점을 가지고 있지만 순수한 이미지 버튼만을 위한 것입니다.
할 수 은 를 하는 것입니다.javascript:void(0)
가장 오래된 브라우저에서도 지원된다는 것입니다.그렇기는 하지만, 저는 당신이 언급한 다른 눈에 띄지 않는 접근법 중 하나를 사용할 것입니다.
- ,
event.preventDefault()
그리고.return false
서로 바꿔 사용할 수 있습니다. event.preventDefault()
원하는 대로 페이지를 다시 로드할 수는 없지만 클릭 이벤트가 상위 항목으로 버블업되도록 허용합니다.을 멈추고 싶다면면다와 함께 .event.stopPropagation
.return false
이벤트가 부모에게 거품이 일게 되는 것을 막을 수 있습니다.
위의 첫 번째 포인트에서 '교환 가능하게'라고 말하는 것은 이벤트가 부모에게 거품을 끼치든 말든 상관하지 않는 경우가 많기 때문입니다.하지만 미세 조정이 필요할 때는 2점과 3점을 고려해야 합니다.
다음의 예를 생각해 봅니다.
<div>Here is some text <a href="www.google.com">Click!</a></div>
$("a").click(function(e) {
e.preventDefault();
});
$("div").click(function() {
$(this).css("border", "1px solid red");
});
. 으로로 그러나 이벤트는 여전히 '거품'이 되어 디브의 클릭 이벤트에 불이 붙게 되고, 이로 인해 주변에 테두리가 추가됩니다. 추가e.stopPropagation()
아니면 그냥 return false
디브의 클릭 이벤트가 발생하지 않습니다.여기서 문제를 해결할 수 있습니다: http://jsfiddle.net/cMKsN/1/
드림위버는 기본적으로 제가 사용하기 시작한 멋진 트릭을 사용합니다.
<a href='javascript:;'></a>
작고, 걸려 넘어지지 않고, 도서관에 구애받지 않습니다.
는 합니다를 더 입니다.return false
, 사용자에게 다음과 같은 동작을 계속할지 여부를 선택할 수 있는 옵션을 제공하기 때문에, 여기에 나와 있는 것과 같이, 퀴크 모드에서 다음과 같은 작업을 계속할지 여부를 선택할 수 있습니다.
http://www.quirksmode.org/js/events_early.html#default
단순하고 오래됐지만 자바스크립트 버전에 상관없이 크로스브라우저로 잘 작동합니다.
event.preventDefault()
그리고.return false;
한 가지입니다. 이벤트에 대한 기본 작업을 처리하지 않도록 브라우저에 지시합니다(이 경우 클릭한 앵커 태그의 href로 이동).href=javascript:
그리고 그 일은 또 다른 것입니다. 그들은 기본적인 행동이 '아무것도 하지 않음'을 야기합니다.
스타일의 문제입니다.온클릭에서 모든 작업을 수행하시겠습니까, 아니면 온클릭과 href 모두에 작업을 넣고 브라우저의 기능에 의존하여 둘 중 하나를 변조할 수 있기를 원하십니까?
사용하는것을 좋아합니다.href="javascript:void(0)"
으로서 링크에#
페이지 상단으로 이동할 수 있음을 의미하며 jQuery 이벤트가 로드되지 않는 경우(예: jQuery가 로드되지 않는 경우) 실제로 발생할 수 있습니다.
저도 사용합니다.event.preventDefault();
예:다 예를 들어:
HTML:
<a id="link" href="http://www.google.com">Test</a>
jQuery 예제 1:
$("#link").click(
function(){
alert("Hi");
invalidCode();
return false;
}
);
jQuery 예제 2:
$("#link").click(
function(event){
event.preventDefault();
alert("Hi");
invalidCode();
return false;
}
);
부터.invalidCode();
다를 .return false
도달하지 않으며 jQuery 예제 1을 사용하는 경우 사용자는 Google로 리디렉션되지만 jQuery 예제 2에서는 그렇지 않습니다.
저도 자바스크립트를 본 적이 있다고 생각합니다. 웹이 발전하면서 사용 가능한 트릭을 추적하기가 어렵습니다.그러나 이것은 주로 접근성에 관한 것입니다. (besides javascript: void(0); ) 그리고 약간의 수정은 javascript: void(0)이 아니라 javascript: void(0)입니다. 즉, javascript: return false; 는 확실하지 않지만 마찬가지입니다.
저는 항상 javascript:void(0)을 사용하고 몇 가지 이유로 사용할 것을 제안합니다.물론 나의 겸손한 생각으로는.
1.) 위에 언급한 사람과 같은 이유로 사용합니다.href="#"는 정상으로 가는 것을 나타낼 수 있기 때문에 적절하지 않으며, 이 경우에도 "#top"이 더 적합할 것입니다.그러나 이는 코드에서 #(해시)를 사용하는 다른 것을 트리거할 수 있으므로, 다른 이유는 #를 사용할 수 있는 다른 자바스크립트와의 충돌을 피하기 위함입니다.그리고 예를 들어 플러그인을 사용할 때 이것을 찾고 즉시 교체하는 편입니다.href='#'에서 href='jav스크립트: void(0); 또는 href='jav스크립트:;'
2.) 특정 앵커 태그 그룹에 대한 기능을 재사용하려면 클릭 이벤트 감지 및 기본 동작 방지에 대한 걱정 없이 어떤 속성의 선택기로 호출할 수 있으며 개발 선호도라고 생각하지 않고 수행합니다.
3.) 대부분의 경우 javascript: void(0)을 사용하여 링크 빌드를 하는 경우, 기존 href= rel= nofollow로 따라가지 않는 링크를 만들려고 하므로 작업인 링크를 인덱싱하지 않습니다.크롤러와 로봇이 이제 플래시도 읽을 수 있다고 해서 자바스크립트 링크를 읽을 수 있다고 해서 놀라지 않습니다.
4.) 2.) 에서 href="jav스크립트: void(0);"를 사용한 후 jQuery 기능에서 selector에서 직접 클래스를 타겟팅하여 클릭이벤트 기본동작 방지에 대한 고민을 잊고 클래스를 타겟팅 할 수 있습니다.
jQuery(function($)
{
//from the rel
$('a[rel="-your-rel-id"]') ... off('click').on('click',function()
//from the class
$('a.-the-class') ... off('click').on('click',function()
//from the id
$('a#-the-id').off('click').on('click',function()
{
--do something with this link
});
});
나는 당신이 항상 할 수 있는 것처럼 수업을 이용하는 것이 더 편합니다.
$(a#-your-id). 클래스(-your-class-)가 있습니다.
또는 다른 흥미로운 조합과 많은 링크에 영향을 미칩니다.그래서 저는 A를 선택자로만 사용하는 것을 제안하지 않을 것입니다.
보통 여기서 제안하는 것은 다음과 같습니다.
jQuery(function($)
{
//from the rel
$('a[rel="-your-rel-id"]').on('click',function(event)
//do something
//prevent the click as is passed to the function as an event
event.preventDefault();
});
});
는 자바스크립트를 .href
그런 의도가 아니니까요나는 이런 것을 선호합니다.
<a href="#" onclick="return handler();">Link</a>
언급URL : https://stackoverflow.com/questions/3498492/javascriptvoid0-vs-return-false-vs-preventdefault
'source' 카테고리의 다른 글
이미지 파일을 양식 데이터에 추가 - Cordova/Angular (0) | 2023.10.09 |
---|---|
동적으로 jQuery UI 변경 대화상자 버튼 텍스트 (0) | 2023.10.09 |
WooCommerce - 배송비 재정의 (0) | 2023.10.09 |
Oracle: 데이터를 찾을 수 없는 경우에도 항상 하나의 행만 반환하는 쿼리를 가져옵니다. (0) | 2023.10.09 |
PowerShell의 어레이에 요소를 동적으로 추가하려면 어떻게 해야 합니까? (0) | 2023.10.09 |