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
_を使用できることを示しました。 [〜#〜] 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()
は必須ではないため。
_$(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;
});
クリックした要素をアンカータグ内でラップします...
$(...).click(function () {
if (check_some_condition)
$(this).wrap('<a id="new1" />');
$('#new1').click();
return true;
});
うん。
$(this).attr('href', 'http://example.com/');