在onclick处理程序中修改目标URL

TMS*_*TMS 16 javascript jquery href

是否可以在onclick处理程序中修改目标URL?怎么样?

我不想使用诸如window.location = ...因为它改变了浏览器的行为(点击vs ctrl-click,在新标签中打开,在特定窗口/框架中打开等等).我想要一个干净的解决方案 - 只需更改网址,其余部分应该像往常一样自行完成.

$(...).click(function () {
    if (check_some_condition) 
        // modify target url here...
        // do not want to do window.location= - this is not clean
        // as it changes the browsers' behaviour (ctrl-click, opening in particular window/frame etc.)
    return true;
});
Run Code Online (Sandbox Code Playgroud)

Gou*_*eau 21

尝试

?$(function(){
    $("#theLink").click(function(){
        $(this).attr("href","http://tnbelt.com");
    });
});????
Run Code Online (Sandbox Code Playgroud)

  • @Magne它似乎工作,至少在Chrome上.我写了一个[vanilla JS](http://jsfiddle.net/sfv2u1sx/1/)版本进行测试. (3认同)
  • 我担心这对已经运行的点击事件没有帮助. (2认同)

Sel*_*gam 11

编辑:更新代码,因为首先执行事件处理程序脚本,然后执行默认操作.

添加以下版本以向您显示您可以使用,.click因为您没有注意到我与您共享的怪癖模式链接.DEMO

$(document).ready (function () {
    $('#changeMe'). click (function (e) {
        var goLucky = Math.floor(Math.random()*12);
        if (goLucky % 2 == 0) {
            this.href = "http://www.google.com";
        } else {
            this.href = "http://www.hotmail.com";
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

评论e.preventDefault();&$(this).click()因为它不是必需的..

DEMO

$(document).ready (function () {
    $('#changeMe').one ('click', function (e) {
        //e.preventDefault();
        this.href = "http://www.google.com";
        //$(this).click();
    });
});
Run Code Online (Sandbox Code Playgroud)