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

Modify target url in onclick handler

本文关键字:修改 目标 url 程序 onclick 处理      更新时间:2023-09-26

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

我不想使用像window.location = ...这样的东西,因为它会改变浏览器的行为(点击与ctrl点击、在新选项卡中打开、在特定窗口/框架中打开等)。我想要一个干净的解决方案-只需更改url,其余的都应该像往常一样自己完成。

$(...).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;
});

尝试

​$(function(){
    $("#theLink").click(function(){
        $(this).attr("href","http://tnbelt.com");
    });
});​​​​

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

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

$(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";
        }
    });
});

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

演示

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

让我们考虑一个隐藏的锚点标签

<a id="linkId" href="myPageToGo.html" class="thickbox" title="" style="visibility:hidden;">Link</a>

然后你可以在代码中模拟锚点点击。。。

$(...).click(function () {
    if (check_some_condition) 
        $('#linkId').click();
    return true;
});

EDIT-替代方式

将单击的元素包裹在锚点标记内。。。

$(...).click(function () {
    if (check_some_condition) 
        $(this).wrap('<a id="new1" />');
        $('#new1').click();
    return true;
});
是的。
$(this).attr('href', 'http://example.com/');

许多答案,包括顶部注释,都遗漏了一个重要的问题。如果用户只是右键单击URL以在新的选项卡/窗口中打开,则此方法将不起作用,因为您直接在"href"URL指定的位置进行请求,而不是通过onclick事件。

你可以在Gorneau的帖子中提到的这个演示小提琴上尝试同样的方法。

http://jsfiddle.net/skram/PtNfD/7/

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