Изменить целевой URL в обработчике onclick

Можно ли изменить целевой URL-адрес в обработчике onclick? Как?

Я не хочу использовать такие вещи, как window.location = ..., потому что он изменяет поведение браузеров (щелчок vs ctrl-click, открытие на новой вкладке, открытие в частности окна/кадра и т.д.). Я хочу чистое решение - просто измените 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;
});

Ответы

Ответ 1

Try

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

Ответ 2

Изменить: Обновлен код, потому что выполняется обработчик событий script, а затем действие по умолчанию происходит,

Добавлена ​​ниже версия, чтобы показать вам, что вы можете использовать .click, поскольку вы не заметили ссылку режима quirks, которую я поделил с вами. 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";
        }
    });
});

Прокомментировал e.preventDefault(); и $(this).click(), поскольку он не требуется.

DEMO

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

Ответ 3

Рассмотрим скрытый тег привязки

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

Затем вы можете имитировать щелчок якоря в коде...

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

РЕДАКТИРОВАТЬ - Альтернативный способ

Оберните элемент, щелкнув внутри метки привязки...

$(...).click(function () {
    if (check_some_condition) 
        $(this).wrap('<a id="new1" />');
        $('#new1').click();
    return true;
});

Ответ 4

Да.

$(this).attr('href', 'http://example.com/');