2010-01-13 4 views
1

클릭하면 팝업 창이 열리길 원하지만 사용자가 JS를 사용할 수없는 경우 새 창에서 페이지를 열면 좋을 것입니다. 위해링크 클릭시 jquery가 false로 돌아 가기

다음은 작동하지 않는 것,

<a id="tac-link" target="_blank" href="tac.html">terms and conditions</a> 

function popUp(URL) { 
day = new Date(); 
id = day.getTime(); 
    eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=550,height=600,left = 445,top = 150');"); 
    } 

$('tac-link').click(function() { 
    popUp('tac.html'); 
    return false; 
}); 

답변

2

이 기능 더 브라우저 호환되도록하려면 e.preventDefault();를 호출 그런 다음, click 핸들러에 이벤트 객체를 전달해야합니다.

예 :

$('#button').click(function(e) { 
    //... your code... 

    e.preventDefault(); 
    return false; 
}); 
+0

아 하 무슨 바보 내가! 감사! – pakooz

0

당신은 단순히 ID가 아닌 노드 이름입니다 나타내는 #을 놓쳤다.

$('#tac-link') 


추신 - 내가 eval를 사용하는 것이 좋습니다 않을 것이다, 왜 그냥 객체의 모든 페이지 변수를 저장하지?

var pages = {}; 

function popUp(url) { 
    var id = +new Date; 
    pages[id] = window.open(url); 
} 
0

또한 event.preventDefault 모든 브라우저에 존재하지 않는 및 IE7 같은 것들에 오류가 발생할 수 있습니다,이를 방지 일반적인 경우 문 사용하기 (메모리 역할을합니다.) :

if (e.preventDefault) { 
    e.preventDefault(); 
} 
e.returnValue = false; 

을 이렇게하면 오류가 발생하지 않습니다. 나는 jQuery가이 방법을 사용하고 있다고 생각한다.

+0

jQuery는 브라우저 이벤트를 자체 객체로 래핑하므로'preventDefault' 메소드를 노출하므로 devs는이 세부 사항에 대해 걱정할 필요가 없습니다. 'return false'는 jQuery가 당신을 위해'preventDefault()'를 호출하는 특별한 트리거이기 때문에이 질문에 대해서는 중요하지 않습니다. –

+0

그런데 최근에 나온 것이 틀림 없습니다. 마지막으로'preventDefault'를 시도해 IE (6 또는 7) 중 하나에서 오류가 발생했습니다. 그 이후로 나는 returnValue 거래 전체를 해왔습니다. – Reid

4

id 선택기를 잘못 생각한 것 같습니다. $('tac-link')$('#tac-link')으로 변경해보세요.

또 다른 방법 :

$('a[target="_blank"]').click(function(e) { 
    window.open(this.href); 
    e.preventDefault(); 
});