web-dev-qa-db-ja.com

onclickハンドラーでターゲットURLを変更する

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;
});
16
TMS

試す

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

編集:イベントハンドラスクリプトが最初に実行され、次にデフォルトのアクションが実行される であるため、コードを更新しました。

以下のバージョンを追加して、私があなたと共有した奇妙なモードのリンクに気付かなかったので、_.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";
        }
    });
});
_

コメントされたe.preventDefault();$(this).click()は必須ではないため。

[〜#〜] demo [〜#〜]

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

非表示のアンカータグについて考えてみましょう

<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;
});
2
Sujit Agarwal

うん。

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