2016-06-30 3 views
0

취소 할 때 사용자가 결과 페이지로 이동하지 못하게하는 팝업을 만들려고합니다. 이 코드는 Chrome, Safari, Opera, Microsoft Edge 및 Internet Explorer 11에서 작동하지만 Firefox에서는 작동하지 않습니다.javascript stopPropagation/cancelBubble/preventDefault가 Firefox에서 작동하지 않음

function leavingAlert(){ 
var check = confirm("You are about to leave the site! You may be going to a website that doesn't provide security. Do you wish to continue?"); 
if(check){ 
this.target="_blank" 
    return true;  
}else{ 
event.cancelBubble = true; 

    return false; 
} 
} 
//WORKING FOR ALL NON-IFRAME LINKS 
var container = document.getElementById("wrapper"); 
var allATags = wrapper.getElementsByTagName("A"); 


for(var i = 0, len = allATags.length; i < len; i++){ 
    var link = allATags[i]; 
    //var pat = /^https?:\/\//i; 
    var pat = new RegExp("https://example.com"); 
    var pat2 = new RegExp("javascript"); 
    if(!pat.test(link.href)){ 
     if(!pat2.test(link.href)){ 
      link.onclick = leavingAlert; 

     } 
    } 

} 

는 또한 행운과 대신 event.cancelBubble의 이러한 사용했습니다 :

event.preventDefault ? event.preventDefault() : event.returnValue = false; 

event.stopImmediatePropagation; 

event.stopPropagation; 

내가 이것을 구현하고 코드 나는 현재 jQuery를 사용할 수 없다. 그래서 평범한 자바 스크립트의 답이 선호됩니다.

답변

0

event을 글로벌 변수로 사용하는 것은 표준 자바 스크립트가 아니며 Firefox에서는 구현되지 않았습니다. 처리기 onclick의 인수로 액세스해야합니다.

function leavingAlert(event){ 
    var check = confirm("You are about to leave the site! You may be going to a website that doesn't provide security. Do you wish to continue?"); 
    if(check){ 
     this.target="_blank"; 
     return true;  
    }else{ 
     event.cancelBubble = true; 

     return false; 
    } 
} 
+0

입니다 , 그것을 테스트하고 효과가! 함수 괄호 밖으로 이벤트를 남기는 최고의 어리석은 실수. –

0

문제는 getElementsByTagName ("A")과 관련이있을 것 같다,하지만 FF의 구현은 대소 문자를 구별 난 그냥 다른 질문을 읽고 똑같은 결론에 도달했다

var allATags = wrapper.getElementsByTagName("a"); 
+0

당신은'getElementsByTagNameNS'을 생각하고 있다고 생각합니다. – Barmar