2016-11-30 1 views
0

<a href=""> 클릭을 듣고 데이터 속성의 링크로 바꾸는 JavaScript (jQuery) 코드가 있습니다.자바 스크립트 창 위치 사용자가 원하는 경우에만 새 탭

<a class="js-external" href="http://www.google.com/" data-href="/tracking.php?url=http://www.google.com/">Google</a> 
<script type="text/javascript"> 
    $('a.js-external').click(function(e) { 
     var hrefNew = $(this).attr('data-href'); 

     if (hrefNew) { 
      e.preventDefault(); 
      window.location.href = hrefNew; 
     } 

    }); 
</script> 

의도 한대로 작동하지만 일부 브라우저 동작이 중단됩니다. 링크 (새로운 창에서 열기)에 ctrl + click의 사용자가있는 경우 URL은 여전히 ​​같은 창에서 열립니다.

어떻게 일반 브라우저를 중단 할 수 있습니까? 사용자가 ctrl을 누른 상태에서 window.open()을 사용하면 감지해야합니까? 당신이 당신의 질문에서 언급 한 바와 같이 그렇게 e.preventDefault();

와 기본 동작을 방지하기 때문에이 문제가 발생

+1

'경우 (e.ctrlKey) window.open (...)'? –

+0

예, 할 수 있습니다. 그러나 나는 또한 mac와 아마도 좀 더 많은 경우를 위해'metaKey'를 추가해야 할 것입니다. 더 좋은 방법이 없을까요? – DenverCoder9

답변

0

당신은 새 창에서 컨트롤 키와 공개 키를 눌러 추적 할 수 있습니다. 이렇게하고 싶지 않은 경우

if(e.ctrlKey) 
    window.open(hrefNew) 
    else 
    window.location.href = hrefNew; 

는하지만 가장 쉬운 방법은 동적 앵커의 href 속성을 설정하는 것입니다.

$('a.js-external').click(function(e) { 
    var hrefNew = $(this).attr('data-href'); 
    if (hrefNew) { 
     $(this).attr("href",hrefNew); 
    } 
}); 

https://jsfiddle.net/tintucraju/go44o3o3/

+1

감사합니다. 실제 href 값을 바꾸는 것이 가장 효과적입니다. 'ctrlKey'를 탐지하는 것 또한 중간 마우스 클릭,'metaKey' 등으로 충분하지 않습니다. 나는 그것이 감지되지 않는 유일한 클릭은 오른쪽 마우스 - 새로운 탭에서 열리는 것입니다. – DenverCoder9

관련 문제