2010-01-14 3 views
0

그래서 HTML 링크와 요소 ID 태그의 사용자를 javascript가있는 다른 페이지로 리디렉션하려고합니다. 나는 하나의 단일 리디렉션을 수행하지만,하는 방법을 알아 냈어요 문제를 heres 내가 가지고있는 지금까지 여러 링크에 대한 코드를 작성 갖는리디렉션하려는 각 링크에 스크립트를 작성하는 방법

HTML :

<head> 
<script type = "text/javascript" src="script2.js"></script> 
</head> 

<body> 
<a href="nickname.html" id="redirect1">NickName</a> 
<a href="salestax.html" id="redirect">Salestax</a> 
<a href="http://www.w3schools.com" id="redirect2">W 3 Schools</a> 

</body> 
</html> 

내 외부 스크립트 지금까지 단지 하나를 링크 :

window.onload = initAll; 

function initAll() { 
    document.getElementById("redirect").onclick = initRedirect; 
} 

function initRedirect() { 
    confirm("Go to Salestax page?"); 
    window.location="salestax.html"; 
    return false; 
{ 

더 많은 기능을 추가하고 위치 값, getElementById 값 및 onclick 값을 변경합니까?

+2

왜이 땅에서이 작업을 수행 하시겠습니까? 사용자가 어디로 가고 싶은지 모를 것 같습니까? –

답변

-1

훨씬 더 나은 접근 방법은 사용자를 리디렉션하는 로직이 링크에 가깝게 유지되도록하는 것과 같은 방법으로 페이지를 사람들이 다른 곳에 가져갈 때 소스를 보는 사람들은 매우 혼란스러워하지 않을 것입니다.

<a href="nickname.html" id="redirect1" onclick="return initRedirect('Go to Salestax page?', 'nickname.html');">Some link</a> 

외부 스크립트 온 클릭 이벤트에 대한

function initRedirect(message, url) 
{ 
    confirm(message); 
    window.location = url; 
    return false; 
} 
+0

HTML 임베디드 이벤트 등록을 피해야하고 그 함수에서'confirm'은 아무 것도하지 않는 것을 제외하고는. –

+0

confirm 함수는 포스터 질문에서 복사하여 붙여 넣습니다. 삽입 된 이벤트 처리기에 대한 인수에 동의하지 않습니다. 동작 및 구조를 분리하는 것에 동의하지만 어떤 시점에서는 동작과 구조 사이에 링크가 있어야합니다. 명백한 링크.링크가 예기치 않은 일을한다는 사실은 링크 자체에서 보는 것이 분명하지만 코드에서는 링크가 표시되기 전에 다른 파일, 다른 파일에서 볼 필요가 있습니다. – Justin

0

좋은 것은 당신이 false를 반환하는 경우는 HREF에 정의 된 링크에가는 브라우저를 중단됩니다 있다는 것입니다. true를 반환하면 탐색을 계속 진행합니다. 창에 대해 걱정할 필요가 없습니다.이 방법을 사용하면 함수에서 위치를 지정하면 많은 작업이 단순화됩니다. 그래서 당신은 할 수 있습니다 :

<a href="salestax.html" onclick="return confirm('Go to Salestax page?');">Salestax</a> 

나는 계속하기를 원한다. 그들은 예를 클릭하면 링크를 정상적으로 클릭 한 것처럼 계속 진행할 것이며, 클릭하지 않으면 탐색하지 못하게됩니다. 이렇게하면 HTML과 자바 스크립트에서 링크의 HREF를 복제 할 필요가 없습니다.

당신은 여전히 ​​이것을 동적으로 묶을 수 있습니다.하지만 당신이 ID로 그것을하고 있다면, 실제로 HTML에서 onclick을 정의하는 것에 비해 장점이 없습니다.

+0

-1 여기 "사용하지 마십시오"참조 : http://www.quirksmode.org/js/events_early.html –

+0

동의하지만 jQuery와 같은 것을 사용하지 않으면 선택기를 사용하여 이러한 모든 이벤트를 쉽게 바인딩 할 수 있습니다. ID를 한 번에 하나씩 모두 바인딩해야하는 것은 미친 짓입니다. 가장 좋은 리팩토링은 확인 텍스트를 제목으로 추가하고 멋진 jQuery를 사용하는 것이지만, 그 변화를 피하는 것이 었습니다. – Parrots

0

먼저 사용자가 현재 페이지에서 변경 한 내용을 잃지 않도록하려는 경우가 아니라면이 기능을 만드는 이유가 명확하지 않습니다. 그러나 어떤 속도로, 여기에 표준/기본 접근 방식 :

window.onload = function() { 
    document.getElementById("redirect").onclick = redirectConfirmation("Go to Salestax page?"); 
    document.getElementById("redirect1").onclick = redirectConfirmation("Go to Nickname?"); 
}; 

redirectConfirmation = function(msg, urlOverride) { 
    return function() { 
     if (confirm(msg)) { 
      window.location = urlOverride || this.href || "#" 
     } 
     return false; 
    }; 
}; 

redirectConfirmation 선택적으로 명시 적으로 페이지로 리디렉션되는 URL을 설정하는 데 사용할 수있는 두 번째 매개 변수를; 그렇지 않으면 앵커 태그의 href 속성에 지정된 URL로 기본 설정됩니다 (다른 모든 태그가 실패하면 "#"으로 정상적으로 실패합니다). 다음과 같이

당신이 공통 라이브러리를 사용하는 경우

, jQuery를 같이, 당신은 당신의 이벤트 등록을 간소화 할 수 있습니다 :

$(function() { 
    $("#redirect").click(redirectConfirmation("Go to Salestax page?")); 
    $("#redirect1").click(redirectConfirmation("Go to Nickname?")); 
}); 
관련 문제