1614
<a href="javascript:void(0)" id="loginlink">login</a>

私はそのようなhrefs を何度も見てきましたが、それが何を意味するのか正確にはわかりません。

4

14 に答える 14

1203

void演算子は、指定された式を評価してから を返しますundefined

このvoid演算子は、undefinedプリミティブ値を取得するためだけに使用されることが多く、通常は「<code>void(0)」(「<code>void 0」と同等) を使用します。このような場合、代わりにグローバル変数undefined を使用できます (デフォルト以外の値が割り当てられていないと仮定します)。

ここに説明があります: voidoperator .

リンクの でこれを行う理由hrefは、通常、javascript:URL はブラウザーをその JavaScript の評価結果のプレーン テキスト バージョンにリダイレクトするためです。しかし、結果がundefinedの場合、ブラウザは同じページにとどまります。void(0)に評価される短くて単純なスクリプトですundefined

于 2009-08-18T05:23:10.093 に答える
487

技術的な回答に加えてjavascript:void、作者が間違っていることを意味します。

javascript:疑似 URL(*)を使用する正当な理由はありません。実際には、誰かが「ブックマーク リンク」や「リンクを新しいタブで開く」などを試みると、混乱やエラーが発生します。これは、人々が中クリックで新しいタブに移動することに慣れているため、非常に頻繁に発生します。リンクのように見え、新しいタブで読みたいのですが、実際のリンクではないことが判明しました。中クリックすると、空白のページや JS エラーなどの望ましくない結果が表示されます。

<a href="#">間違いなくそれほど悪くない一般的な代替手段です。ただし、リンクがたどられてページの上部までスクロールされないように、イベント ハンドラーreturn falseから忘れないようにする必要があります。onclick

場合によっては、リンクを指すのに実際に役立つ場所があるかもしれません。たとえば、クリックして以前に隠していた を開くことができるコントロールがある場合、それにリンクするため<div id="foo">に使用するのは理にかなっています。<a href="#foo">または、JavaScript 以外で同じことを行う方法がある場合 (たとえば、最初から foo を可視に設定する「thispage.php?show=foo」など)、その方法にリンクできます。

それ以外の場合、リンクが特定のスクリプトのみを指している場合、それは実際にはリンクではなく、そのようにマークアップするべきではありません。通常のアプローチはonclick<span><div>、またはに<a>を追加しhref、何らかの方法でスタイルを設定して、クリックできることを明確にすることです。これは、StackOverflow [執筆時点で行ったものです。今はhref="#"]を使用しています。

これの欠点は、span/div/bare-a にタブで移動したり、スペースでアクティブにしたりできないため、キーボード コントロールを失うことです。これが実際に不利になるかどうかは、要素がどのようなアクションを意図しているかによって異なります。tabIndex要素に a を追加し、Space キーの押下をリッスンすることで、多少の努力を払って、キーボードの対話機能を模倣することができます。しかし、実際のブラウザーの動作を 100% 再現することは決してありません。特に、ブラウザーが異なればキーボードへの応答も異なる可能性があるためです (非ビジュアル ブラウザーは言うまでもありません)。

リンクではなく、通常どおりマウスまたはキーボードでアクティブ化できる要素が本当に必要な場合は、必要なものは です<button type="button">(または<input type="button">、単純なテキスト コンテンツの場合は同じくらい良い)。必要に応じて、いつでも CSS を使用してスタイルを変更し、ボタンよりもリンクのように見せることができます。しかし、これはボタンのように振る舞うので、実際にはそのようにマークアップする必要があります。

(*: とにかく、サイトのオーサリングでは。明らかに、ブックマークレットに役立ちます。javascript:疑似 URL は概念的に奇妙です。場所を指さず、代わりに現在の場所内のアクティブなコードを呼び出すロケーターです。それらは大規模なセキュリティを引き起こしています。ブラウザと Web アプリケーションの両方の問題であり、Netscape によって発明されるべきではありませんでした。)

于 2009-08-18T10:50:44.923 に答える
138

何もしないということです。リンクがどこにも「移動」しないようにする試みです。しかし、それは正しい方法ではありません。

実際には、次のようreturn falseにイベントに参加する必要があります。onclick

<a href="#" onclick="return false;">hello</a>

通常、リンクが「JavaScript-y」の処理を行っている場合に使用されます。AJAX フォームの投稿、画像の交換など。その場合、呼び出されている関数を return にするだけですfalse

ただし、Web サイトを完全に素晴らしいものにするためには、通常、閲覧者が JavaScript を実行しないことを選択した場合に、同じアクションを実行するリンクを含めます。

<a href="backup_page_displaying_image.aspx"
   onclick="return coolImageDisplayFunction();">hello</a>
于 2009-08-18T05:21:36.787 に答える
92

これは、HTML リンクに JavaScript 関数を追加するための非常に一般的な方法です。
たとえば[Print]、多くのウェブページで見られるリンクは次のように書かれています。

<a href="javascript:void(0)" onclick="callPrintFunction()">Print</a>

href一人で仕事を成し遂げることができるのに、なぜ私たちは必要なonclickのですか?がないときにユーザーがテキスト「印刷」にhrefカーソルを合わせると、カーソルがポインター (

于 2014-01-14T07:17:36.963 に答える
86

vsの動作には大きな違いがあります。#javascript:void(0);

#ページの一番上までスクロールしますが、そうでjavascript:void(0);はありません。

ユーザーがページ上のリンクをクリックしたときにトップに戻りたくないため、動的ページをコーディングしている場合、これは非常に重要です。

于 2009-08-18T08:25:40.740 に答える
51

aタグには常に href が必要です。「未定義」を返す JavaScript 関数を呼び出しても問題ありません。「#」へのリンクも同様です。

href のない Internet Explorer 6 のアンカー タグには、a:hoverスタイルが適用されません。

はい、それは人道に対する重大な犯罪であり、軽微な犯罪ですが、Internet Explorer 6 全般についても同様です。

これが役立つことを願っています。

Internet Explorer 6 は、実際には人道に対する重大な犯罪です。

于 2009-08-18T05:25:24.300 に答える
40

void 0必要な文字数が少ないため、未定義をチェックするときに時々表示されることに注意してください。

例えば:

if (something === undefined) {
    doSomething();
}

に比べ:

if (something === void 0) {
    doSomething();
}

このため、一部の縮小方法は に置き換えundefinedられます。void 0

于 2016-11-10T06:32:15.413 に答える
21

voidundefinedブラウザが新しいページをロードできないように、値を返すために使用される演算子です。

Web ブラウザは、null を返す JavaScript 関数でない限り、URL として使用されているものをすべて取得してロードしようとします。たとえば、次のようなリンクをクリックするとします。

<a href="javascript: alert('Hello World')">Click Me</a>

その場合、新しいページをロードせずに警告メッセージが表示されます。これalertは、関数が null 値を返すためです。これは、ブラウザーが新しいページを読み込もうとすると、null が表示され、何も読み込まれないことを意味します。

void 演算子について注意すべき重要な点は、値が必要であり、単独では使用できないことです。次のように使用する必要があります。

<a href="javascript: void(0)">I am a useless link</a>
于 2012-03-15T07:34:17.250 に答える
18

この概念を理解するには、まず JavaScript の void 演算子を理解する必要があります。

void 演算子の構文は次のとおりですvoid «expr»。expr を評価し、undefined を返します。

void を関数として実装すると、次のようになります。

function myVoid(expr) {
    return undefined;
}

この void 演算子には、式の結果を破棄するという 1 つの重要な使用方法があります。

場合によっては、式の結果ではなく undefined を返すことが重要です。次に、void を使用してその結果を破棄できます。そのような状況の 1 つに javascript: URL が含まれます。これはリンクには避けるべきですが、ブックマークレットには便利です。これらの URL の 1 つにアクセスすると、多くのブラウザは現在のドキュメントを URL の「コンテンツ」を評価した結果に置き換えますが、結果が未定義でない場合に限ります。したがって、現在表示されているコンテンツを変更せずに新しいウィンドウを開きたい場合は、次の操作を実行できます。

javascript:void window.open("http://example.com/")
于 2016-08-02T09:16:28.880 に答える
15

演算子は、指定された式を評価し、void未定義を返します。ページの更新を回避します。

于 2013-07-24T13:47:32.050 に答える