리디렉션없이 클릭으로 간단한 JavaScript 함수를 실행하고 싶습니다.
JavaScript 호출을 href
속성 에 넣는 것과 다른 점이 있습니까?
<a href="javascript:my_function();window.print();">....</a>
) 대 onclick
속성에 넣는 것 ( onclick
이벤트에 바인딩 )?
리디렉션없이 클릭으로 간단한 JavaScript 함수를 실행하고 싶습니다.
JavaScript 호출을 href
속성 에 넣는 것과 다른 점이 있습니까?
<a href="javascript:my_function();window.print();">....</a>
) 대 onclick
속성에 넣는 것 ( onclick
이벤트에 바인딩 )?
답변:
href 내에 onclick을 넣으면 콘텐츠를 행동 / 행동과 분리시키는 것을 강력하게 믿는 사람들이 기분을 상하게 할 수 있습니다. 논란은 귀하의 HTML 컨텐츠가 프리젠 테이션이나 행동이 아닌 컨텐츠에만 집중해야한다는 것입니다.
요즘 일반적인 경로는 자바 스크립트 라이브러리 (예 : jquery)를 사용하고 해당 라이브러리를 사용하여 이벤트 핸들러를 만드는 것입니다. 다음과 같이 보일 것입니다 :
$('a').click( function(e) {e.preventDefault(); /*your_code_here;*/ return false; } );
href
것과 인라인으로 넣는 것의 차이점에 대해 묻는 질문은 없었 onclick
습니까? 어떤 이유로 인라인으로 넣을 것이라고 가정하면 어떤 것을 사용해야합니까? (실제로 나는 당신이 제시 한 것을 할 것입니다,하지만 당신은 두 속성의 차이를 통해 건너 뛸 것 같다.)
나쁜:
<a id="myLink" href="javascript:MyFunction();">link text</a>
좋은:
<a id="myLink" href="#" onclick="MyFunction();">link text</a>
보다 나은:
<a id="myLink" href="#" onclick="MyFunction();return false;">link text</a>
더 나은 1 :
<a id="myLink" title="Click to do something"
href="#" onclick="MyFunction();return false;">link text</a>
더 나은 2 :
<a id="myLink" title="Click to do something"
href="PleaseEnableJavascript.html" onclick="MyFunction();return false;">link text</a>
왜 더 좋아? return false
브라우저가 링크를 따라 가지 못하게 하기 때문에
베스트:
jQuery 또는 기타 유사한 프레임 워크를 사용하여 요소의 ID별로 클릭 핸들러를 첨부하십시오.
$('#myLink').click(function(){ MyFunction(); return false; });
href
설정되지 않은 최상의 솔루션이있을 것 #
입니다.
의 관점에서 자바 스크립트 한 차이가 있다는 것이다 this
에서 키워드 onclick
핸들러가 그 DOM 요소를 참조한다 onclick
속성이 (이 경우 인 <a>
반면, 요소) this
에서 href
받는 참조 할 속성 window
오브젝트.
표현 측면에서 , href
속성이 링크 (예 :)에없는 경우 <a onclick="[...]">
기본적으로 브라우저는 링크가 아닌 앵커로 취급하기 때문에 커서 text
가 자주 표시되는 커서가 아닌 커서 를 표시합니다 .pointer
<a>
동작 측면 에서을 통해 탐색을 통해 작업을 지정할 때 href
브라우저는 일반적으로 href
바로 가기 또는 상황에 맞는 메뉴를 사용하여 별도의 창에서 열 수 있도록 지원 합니다. 를 통해서만 동작을 지정할 때는 불가능합니다 onclick
.
그러나 DOM 객체를 클릭하여 동적 작업을 수행하는 가장 좋은 방법이 무엇인지 묻는다면 문서의 내용과 별도로 Javascript를 사용하여 이벤트를 첨부하는 것이 가장 좋습니다. 여러 가지 방법으로이 작업을 수행 할 수 있습니다. 일반적인 방법은 jQuery와 같은 자바 스크립트 라이브러리를 사용하여 이벤트를 바인딩하는 것입니다.
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<a id="link" href="http://example.com/action">link text</a>
<script type="text/javascript">
$('a#link').click(function(){ /* ... action ... */ })
</script>
나는 사용한다
Click <a nohref style="cursor:pointer;color:blue;text-decoration:underline"
onClick="alert('Hello World')">HERE</a>
먼 길이지만 작업이 완료됩니다. A 스타일을 사용하여 단순화하면 다음과 같습니다.
<style> A {cursor:pointer;color:blue;text-decoration:underline; } </style>
<a nohref onClick="alert('Hello World')">HERE</a>
nohref
속성 에 대해 들어 본 적이 없다 . 이것은 이러한 자바 스크립트 작업을 처리하는 가장 논리적 / 우아한 방법입니다. FF12 및 IE8과 호환됩니다. 그러므로 나는 내 모든 대체됩니다 href="JavaScript:void(0);"
에 의해 nohref
. 고마워 건배.
nohref
area
태그 의 일부가 아니라 a
! 귀하의 예는 다음과 같습니다<a onClick="alert('Hello World')">HERE</a>
nohref
에 없습니다 a
.
이를 수행하는 가장 좋은 방법은 다음과 같습니다.
<a href="#" onclick="someFunction(e)"></a>
문제는 브라우저의 페이지 URL 끝에 해시 (#)를 추가하므로 사용자가 뒤로 버튼을 두 번 클릭하여 페이지로 이동해야한다는 것입니다. 이를 고려하여 이벤트 전파를 중지하는 코드를 추가해야합니다. 대부분의 자바 스크립트 툴킷에는 이미이 기능이 있습니다. 예를 들어, dojo 툴킷은
dojo.stopEvent(event);
그렇게하기 위해.
href="#"
브라우저 를 사용 하면 명명 된 앵커 태그를 찾고 그것을 찾지 못하면 창을 페이지 상단으로 스크롤하여 페이지가 보이지 않을 수 있음을 경고하고 싶습니다. 당신은 이미 정상에 있습니다. 이 동작을 피하려면 href="javascript:;"
대신 다음을 사용하십시오.
가장 좋은 대답은 매우 나쁜 습관입니다. 빈 해시에 연결하면 절대로 문제가 발생하지 않습니다.
그러나 다른 많은 사람들이 언급했듯이 이벤트 핸들러를 요소에 바인딩하는 것이 가장 좋습니다. <a href="javascript:doStuff();">do stuff</a>
모든 최신 브라우저에서 완벽하게 작동하며 템플릿을 렌더링 할 때 광범위하게 사용하여 각 인스턴스에 대해 리 바인드하지 않아도됩니다. 경우에 따라이 접근 방식은 더 나은 성능을 제공합니다. YMMV
또 다른 흥미로운 tid-bit ....
onclick
& href
자바 스크립트를 직접 호출 할 때 다른 동작이 있습니다.
onclick
this
컨텍스트를 올바르게 전달 하는 반면 href
, <a href="javascript:doStuff(this)">no context</a>
작동하지 않거나 다른 방식으로 는 작동하지 않습니다.<a onclick="javascript:doStuff(this)">no context</a>
것입니다.
그렇습니다 href
. 그것이 사양을 따르지는 않지만 모든 브라우저에서 작동하지만 이상적으로 href="javascript:void(0);"
는 좋은 측정을 위해 포함해야합니다.
데 javascript:
스크립팅 구체적 아닌 임의의 속성은 HTML의 오래된 방법이다. 기술적으로는 작동하지만 여전히 자바 스크립트 속성을 비 스크립트 속성에 할당하는 것은 좋지 않습니다. 오래된 브라우저 또는 일부 최신 브라우저에서도 실패 할 수 있습니다 (Google 포럼 게시물은 Opera가 'javascript :'urls를 좋아하지 않음을 나타냅니다).
자바 스크립트를 onclick
속성 에 넣는 두 번째 방법 은 스크립트 기능이없는 경우 무시하는 것이 좋습니다. 자바 스크립트가없는 사용자를 위해 href 필드에 유효한 URL (일반적으로 '#')을 입력하십시오.
이 코드 줄을 사용하여 나를 위해 일했습니다.
<a id="LinkTest" title="Any Title" href="#" onclick="Function(); return false; ">text</a>
이 작동합니다
<a href="#" id="sampleApp" onclick="myFunction(); return false;">Click Here</a>
Javascript와 함께 "href"를 사용할 때주의해야 할 사항이 하나 더 있습니다.
두 번의 클릭 사이의 시간 차이가 매우 짧은 경우 "href"속성의 스크립트가 실행되지 않습니다.
예를 들어, 다음 예제를 실행하고 각 링크에서 두 번 클릭 (빠른!)하십시오. 첫 번째 링크는 한 번만 실행됩니다. 두 번째 링크는 두 번 실행됩니다.
<script>
function myFunc() {
var s = 0;
for (var i=0; i<100000; i++) {
s+=i;
}
console.log(s);
}
</script>
<a href="javascript:myFunc()">href</a>
<a href="#" onclick="javascript:myFunc()">onclick</a>
Chrome (더블 클릭) 및 IE11 (트리플 클릭)에서 재생되었습니다. Chrome에서 충분히 빠르게 클릭하면 10 번의 클릭만으로 1 회의 기능 만 실행할 수 있습니다.
Firefox는 정상적으로 작동합니다.
첫째, href
사용자가 링크를 복사하거나 다른 탭에서 열 수 있도록하기 때문에 URL을 입력하는 것이 가장 좋습니다.
경우에 따라 (예 : HTML이 자주 변경되는 사이트) 업데이트가있을 때마다 링크를 바인딩하는 것은 실용적이지 않습니다.
일반 링크 :
<a href="https://www.google.com/">Google<a/>
그리고 JS의 경우 이와 같은 것 :
$("a").click(function (e) {
e.preventDefault();
var href = $(this).attr("href");
window.open(href);
return false;
});
이 방법의 장점은 마크 업과 동작을 명확하게 분리하여 모든 링크에서 함수 호출을 반복 할 필요가 없다는 것입니다.
그러나 매번 바인드하지 않으려면 onclick을 사용하여 요소와 이벤트를 전달하십시오.
<a href="https://www.google.com/" onclick="return Handler(this, event);">Google</a>
그리고 이것은 JS의 경우 :
function Handler(self, e) {
e.preventDefault();
var href = $(self).attr("href");
window.open(href);
return false;
}
이 방법의 장점은 매번 바인딩에 대해 걱정할 필요없이 원하는 때마다 AJAX를 통해 새 링크를로드 할 수 있다는 것입니다.
<hr>
<h3 class="form-signin-heading"><i class="icon-edit"></i> Register</h3>
<button data-placement="top" id="signin_student" onclick="window.location='signup_student.php'" id="btn_student" name="login" class="btn btn-info" type="submit">Student</button>
<div class="pull-right">
<button data-placement="top" id="signin_teacher" onclick="window.location='guru/signup_teacher.php'" name="login" class="btn btn-info" type="submit">Teacher</button>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('#signin_student').tooltip('show'); $('#signin_student').tooltip('hide');
});
</script>
<script type="text/javascript">
$(document).ready(function(){
$('#signin_teacher').tooltip('show'); $('#signin_teacher').tooltip('hide');
});
</script>