2012-04-18 14 views
11

私は現在ファイルブラウザを作っています。ユーザーがファイルへのリンクをクリックすると、小さなウィンドウが開き、オプション(ダウンロードや表示など)が尋ねられます。私はこれをonclick属性を使って行っています。リンクをクリックするとjavascriptが実行されますが、この後にhrefで指定されたURLが開きます。私がしようとしているのは、リンクをクリックするとjavascriptが実行され、最終的に転送されます。しかし、リンクが右クリックされると、「リンクリンクの場所」は依然として利用できるはずです。 私は転送スクリプトをブロックすることでこれを解決しようと考えています。リンクが右クリックされるとJavaScriptは実行されず、リンクの場所をコピーすることができます。しかし、あなたがリンクをクリックしたままにすると、JavaScriptが実行され、リンクは開かれません。 これはjavascriptで可能ですか、それともこの動作を実現する他の方法がありますか?html - ブラウザがhrefで指定されたリンクを開くのを防ぐには?

答えて

14

リンク実行を防止するために、1つの方法は、 "onclick"メソッドがfalseを返すようにすることです。

例えば:

<a href="http://..." onclick="return clickfunc()">...</a> 

clickfunc()もし戻っfalse、リンクをクリックすると、に直接ではないだろう "のhttp:// ..."

をあなたはおそらくより

のようにそれを処理しているが、あなたのクリック機能からデフォルトを防ぐために持っている
<a href="http://..." id="somebutton">...</a> 
<script> 
document.getElementById('somebutton').onclick = function() { 
     ... 
     else { return false; } 
}; 
</script> 
+4

Javascript!= jQuery。 jQueryのfalseの返り値は "伝播を停止してデフォルトを防ぐ"ことを意味しますが、Javascriptでは単に "伝播を停止"を意味します(デフォルトのリンククリックアクションは停止しません)。 http://www.w3.org/TR/DOM-Level-3-Events/#events-event-type-stopImmediatePropagation – machineghost

+0

を参照してください。また、すべてのブラウザでそうであっても偽を返すとは限りません。私がリンクしている仕様は "DOM Level 3"であり、AFAIK IE8はその仕様を完全に実装していません。 – machineghost

+0

私は何とかjQueryを参照していません。リンク 'Test 'を作成すると、私がテストに利用できるすべてのブラウザをクリックしても何もしません。私は虚偽を返すことが悪い習慣であったこと、または今までは状況下では機能しないことを認識していませんでした。そうであれば、お詫び申し上げますが、より理解しやすいリソースを提供してください。正しい見出しを教えてください。あなたのリンクから関連性のあるものは抽出できません。 – Armatus

0

はい、イベントのprevent the default actionが必要です。あなたのonclick属性にfalseを返すことでそうすることができます。

+1

Javascriptを= jQueryの。 jQueryのfalseの返り値は "伝播を停止してデフォルトを防ぐ"ことを意味しますが、Javascriptでは単に "伝播を停止"を意味します(デフォルトのリンククリックアクションは停止しません)。 http://www.w3.org/TR/DOM-Level-3-Events/#events-event-type-stopImmediatePropagation – machineghost

+0

を参照してください。また、すべてのブラウザでそれが偽であるとは限りません。私がリンクしている仕様は "DOM Level 3"であり、AFAIK IE8はその仕様を完全に実装していません。 – machineghost

+0

いいえ、私はeventListener(jQueryについては何も言わなかった)、私はOPが使用するonclick属性を意味しました。 – Bergi

7

function stopDefAction(evt) { 
    evt.preventDefault(); 
} 
+2

この回答は他のものよりも正確ですが、私がコメントしたように、falseを返しても、生のJavascriptでのデフォルトを防ぐことはできません(stopPropagation()と同じです)。ですから、preventDefaultの答えが唯一の正しいものです(falseを返すとそれをカットしません)。 – machineghost

+0

お返事ありがとうございます。 –

+0

:-)問題ありません! – machineghost

1

テキスト "のjavascript:無効(0)" でhref属性を置き換えることができますたとえば、:!

<a href="http://..." id="somebutton">...</a> 
<script> 
document.getElementById('somebutton').href="javascript:void(0)" 
</script> 
+0

私はこれを試みたが、didnotの仕事。空のブラウザウィンドウが表示されます – Ziggler

関連する問題