【问题标题】:javascript stopPropagation/cancelBubble/preventDefault not working in Firefoxjavascript stopPropagation/cancelBubble/preventDefault 在 Firefox 中不起作用
【发布时间】:2026-01-15 22:05:01
【问题描述】:

我正在尝试制作一个弹出窗口,如果用户点击取消,它将阻止用户转到结果页面。此代码适用于 Chrome、Safari、Opera、Microsoft Edge 和 Internet Explorer 11,但不适用于 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,因此最好使用纯 Javascript 的答案,谢谢!

【问题讨论】:

    标签: javascript firefox preventdefault stoppropagation


    【解决方案1】:

    使用event 作为全局变量不是标准的 Javascript,也没有在 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;
        }
    }
    

    【讨论】:

    • 我只是在阅读其他一些问题并得出了完全相同的结论,测试它并且它有效!将事件排除在函数括号之外的超级愚蠢的错误。
    【解决方案2】:

    问题似乎与getElementsByTagName("A")有关,但在FF中实现是区分大小写的

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

    【讨论】:

    • 我想你在想getElementsByTagNameNS