preventDefault,进行更改并继续例程

时间:2014-07-30 21:58:51

标签: javascript addeventlistener preventdefault stoppropagation attachevent

我有一个带有脚本的小站点,该脚本使用mysql运行查询并返回一些数据,包括域。这些域是生成html链接,我想在javascript中更改,因为我无法访问php的部分,但是javascript和css代码是。

我只是希望您在链接上触发click事件时运行代码。我试图默认停止执行并进行更改,但我的代码不会打开页面。如果我删除preventDefault只能在firefox中工作,但我还没有chrome。 (window.open不使用,我想更改原始链接)。

var domains = document.getElementsByClassName("domain");

for(var x = 0; x < domains.length; x++){
    if(domains[x].addEventListener) {
        domains[x].addEventListener("click", changeLink, "false");
    } else if(domains[x].attachEvent) {
        domains[x].attachEvent("onclick", changeLink);
    }
}

function changeLink(evt){

    var urlOriginal = this.href;

    // If I remove preventDefault, the function runs correctly on firefox but not in chrome
    evt.preventDefault();

    if(urlOriginal != 'http://google.com') {

        urlOriginal = urlOriginal.replace(/http:\/\//g, '');

        evt.stopPropagation();

        this.href = 'http://intodns.com/' + urlOriginal;

        console.log('Okay !');

    }

    return true;
}

我尝试了几项更改但没有一项正在运行,事实并非如此。

有谁知道故障的原因?如何在没有window.open的情况下修复它?

由于

2 个答案:

答案 0 :(得分:0)

尝试stopPropagation而不是

http://api.jquery.com/event.stoppropagation/ - 了解更多信息

答案 1 :(得分:0)

如果我理解正确,您希望将用户重定向到其他链接,而不是href属性中设置的链接。

创建click后,如果更改元素的href属性,则不会发生任何事情。您正在寻找的是重定向用户,这可以通过修改驻留在window上的location对象来实现。

而不是这一行:

this.href = 'http://intodns.com/' + urlOriginal;

试试这个:

window.location = 'http://intodns.com/' + urlOriginal;