<a href="javascript:void(0)" id="loginlink">login</a>
私はそのようなhref
sを何度も見ましたが、それが何を意味するのか正確にはわかりません。
<a href="javascript:void(0)" id="loginlink">login</a>
私はそのようなhref
sを何度も見ましたが、それが何を意味するのか正確にはわかりません。
回答:
void
オペレータは、与えられた式と、その後リターンを評価しますundefined
。
void
オペレータはしばしば得るために単に使用されるundefined
「通常用い、プリミティブ値をvoid(0)
」(に相当します「void 0
」)。このような場合は、undefined
代わりにグローバル変数を使用できます(デフォルト以外の値に割り当てられていない場合)。
説明は次のとおりです:void
演算子。
href
リンクを使用してこれを実行する理由は、通常、javascript:
URLはブラウザをそのJavaScriptの評価結果のプレーンテキストバージョンにリダイレクトするためです。ただし、結果がの場合、undefined
ブラウザは同じページにとどまります。void(0)
は、に評価される短くて単純なスクリプトですundefined
。
技術的な答えに加えて、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
て、要素にを追加し、スペースキーの押下をリッスンして、キーボードの操作性を模倣することができます。ただし、実際のブラウザの動作を100%再現することは決してできません。それは、ブラウザによってキーボードへの応答が異なるためです(非ビジュアルブラウザは言うまでもありません)。
リンクではないが、マウスまたはキーボードで通常どおりアクティブ化できる要素が本当に必要な場合は、必要なのは<button type="button">
(または<input type="button">
単純なテキストコンテンツの場合はそれと同じように)です。必要に応じて、CSSを使用してスタイルを変更し、ボタンではなくリンクのようにすることができます。しかし、ボタンのように動作するため、それを実際にマークアップする必要があります。
(*:いずれにしても、サイトのオーサリングで使用します。明らかにブックマークレットに役立ちます。javascript:
疑似URLは概念的な奇妙さです。場所を指し示すのではなく、現在の場所内のアクティブなコードを呼び出すロケーターです。これらは大規模なセキュリティを引き起こしています。ブラウザとウェブアプリの両方に問題があり、Netscapeによって発明されるべきではありませんでした。)
href
、癖や副作用を含むsのクロスブラウザーキーボードのナビゲーション性についていくつかの調査を行いました。一部の人はそれが便利だと思うかもしれません:jakub-g.github.com/accessibility/onclick
void(0)
多くの場合に必要です。「#」は、多くの問題をもたらすハックです(私が書いているアプリでは機能しないため、このページに移動しました)。
preventDefault
。使用しない限り、ドキュメントがページの先頭にジャンプするためです。アンカーをフォームのボタンとして使用する場合は、行わないでください。
それは何もしないことを意味します。これは、リンクをどこにも「ナビゲート」しないようにする試みです。しかし、それは正しい方法ではありません。
次のようreturn false
に、実際にはonclick
イベントに参加するだけです。
<a href="#" onclick="return false;">hello</a>
通常、リンクが「JavaScript-y」を実行している場合に使用されます。AJAXフォームの投稿や、画像の交換などです。その場合は、呼び出されている関数をreturnにするだけfalse
です。
ただし、ウェブサイトを完全にすばらしいものにするために、閲覧者がJavaScriptを実行しないことを選択した場合は、通常、同じアクションを実行するリンクを含めます。
<a href="backup_page_displaying_image.aspx"
onclick="return coolImageDisplayFunction();">hello</a>
<a href="enableJavaScriptToSeeMyCompletelyAwesomeSite.html" onclick="completelyAwesome();return false;">
。
「#」とjavascript:voidの動作には大きな違いがあります
「#」はページのトップにスクロールし、「javascript:void(0);」は ではない。
動的ページをコーディングする場合、これは非常に重要です。ユーザーがページのリンクをクリックしたからといって、トップに戻ることを望まない。
false
、イベントハンドラに戻ることによって抑制できます。onclick="doSomething();return false;"
または、doSomething()
戻るfalse
場合はを使用できますonclick="return doSomething();"
。
e.preventDefault()
。
"#"
はfalseを返しても上部にスクロールしないので、この回答を編集または削除することができます。
これは、JavaScript関数をHTMLリンクに追加する非常に一般的な方法です。
たとえば[Print]
、多くのWebページに表示されるリンクは次のように記述されています。
<a href="javascript:void(0)" onclick="callPrintFunction()">Print</a>
なぜ私たちが必要なのでしょhref
ながらonclick
一人で仕事を得ることができますか?ユーザーががないときに「印刷」というテキストにhref
カーソルを合わせると、カーソルがポインター(👆)ではなくキャレット(ꕯ)に変わるためです。唯一の持つhref
上a
のタグは、ハイパーリンクとしてそれを検証します。
の代わりにhref="javascript:void(0);"
、を使用しhref="#"
ます。この代替手段では、ユーザーのブラウザーでJavaScriptをオンにする必要がないため、互換性が高くなります。
href
ポインティングハンドカーソルを取得する必要はありません。必要なのは、少しのCSSだけです。
<a href="javascript:callPrintFunction()">
はよりクリーンです(実際にどこにも行かない場合button
は、a
アンカーではなくおそらくアンカーであるはずです)。
href="#"
厄介な驚きにつながる可能性があります-中止されたxhrリクエストのように、そのリンクへのクリックで呼び出されることがあります。最近、ユーザーがたまたまサイトのルートではないアドレスにいる場合、要求されたoidcログインを中止するWebサイトのデバッグに苦労しました。#
xhrリクエストが完了する前に、hrefによりアドレスがリロードされました。
必要な文字数が少ないという理由だけで、未定義をチェックするときにvoid 0が表示されることがあります。
例えば:
something === undefined
対
something === void 0
このため、一部の縮小化メソッドはundefinedをvoid 0に置き換えます。
void 0
ます。多くのメソッドがデフォルトのparam値を使用している場合、3文字の違いはすぐに加算されます。
の使用はjavascript:void(0)
、HTMLの作成者がボタン要素の代わりにアンカー要素を誤用していることを意味します。
アンカータグは、ページが更新されないようにhrefを "#"または "javascript:void(0)"に設定して疑似ボタンを作成するonclickイベントで悪用されることがよくあります。これらの値は、リンクのコピー/ドラッグ、新しいタブ/ウィンドウでリンクを開く、ブックマークする、JavaScriptがまだダウンロードされている、エラーが発生している、または無効になっている場合に、予期しない動作を引き起こします。これはまた、誤ったセマンティクスを支援技術(スクリーンリーダーなど)に伝えます。このような場合は、
<button>
代わりにを使用することをお勧めします。一般に、適切なURLを使用するナビゲーションにはアンカーのみを使用する必要があります。
出典:MDNの<a>
ページ。
void
undefined
ブラウザが新しいページをロードできないように値を返すために使用される演算子です。
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>
この概念を理解するには、まずJavaScriptのvoid演算子を理解する必要があります。
void演算子の構文は次のとおりです。 void «expr»
これはexprを評価し、未定義を返します。
関数としてvoidを実装すると、次のようになります。
function myVoid(expr) {
return undefined;
}
このvoid演算子には、式の結果を破棄するという重要な使用法があります。
状況によっては、式の結果ではなく、未定義を返すことが重要です。その後、その結果を破棄するためにvoidを使用できます。そのような状況の1つにjavascript:URLが含まれます。URLはリンクでは回避する必要がありますが、ブックマークレットでは役立ちます。これらのURLの1つにアクセスすると、多くのブラウザは、現在のドキュメントをURLの「コンテンツ」を評価した結果に置き換えますが、結果が未定義でない場合のみです。したがって、現在表示されているコンテンツを変更せずに新しいウィンドウを開く場合は、次の操作を実行できます。
javascript:void window.open("http://example.com/")
function myVoid(expr) { expr(); return undefined; }
あなたが追加し忘れてしまった )(式exprを。
expr
はmyVoid()
呼び出されたときに既に評価されています(その式の結果はパラメーターとして渡されます)
function() { alert("foo"); }
は有効な式です。void(function() { alert("foo"); })
は戻り、警告を表示undefined
しませんが、警告を表示myVoid(function() { alert("foo"); })
します(ご使用のバージョンでは、Gopal Yadavのものではありません)。
タグのjavascript:void(0)
デフォルトの動作を防ぐ最も簡単な方法であるため、Web開発者が使用しますa
。void(*anything*)
戻りundefined
、それは偽の値です。そして、falsy値を返すことのようであるreturn false
中onclick
のイベントa
のデフォルトの動作を妨げるタグ。
したがってjavascript:void(0)
、a
タグのデフォルトの動作を防ぐ最も簡単な方法だと思います。
リンクを使用可能な表示オブジェクトにするには、リンクにHREFターゲットを指定する必要があります。
ほとんどのブラウザは、高度なJavaScriptを
<A HREF=""
次のようなタグ:
<A href="JavaScript:var elem = document.getElementById('foo');"
ほとんどのブラウザのHREFタグは空白を許可しないか、空白を%20に変換するため、JavaScriptはインタプリタにとってまったく役に立たない、SPACEに相当するHEXです。
そのため、A HREFタグを使用してインラインJavaScriptを実行する場合は、複雑すぎない(空白文字を含まない)HREF FIRSTの有効な値を指定し、OnClickのようなイベント属性タグにJavaScriptを提供する必要があります。 、OnMouseOver、OnMouseOutなど
典型的な答えは次のようなことをすることです:
<A HREF="#" onclick="var elem = document.getElementById('foo');">Get the object</a>
これは正常に動作しますが、ポンド記号/ハッシュタグがそのように指示しているため、ページが先頭にジャンプします。
A HREFタグでシャープ記号/ハッシュタグを指定するだけで、実際にはルートアンカーが指定されます。これは常にデフォルトでページの上部にあり、A HREFタグ内でNAME属性を指定することで別の場所を指定できます。
<A NAME='middleofpage'></A>
次に、A HREFタグを変更して「middleofpage」にジャンプし、OnClickイベントでJavaScriptを実行します。
<A HREF="#middleofpage" onclick="var elem = document.getElementById('foo');">Get the object</a>
そのリンクをジャンプさせたくない場合が多いので、次の2つのことを行うことができます。
<A HREF="#thislinkname" name='thislinkname' onclick="var elem = document.getElementById('foo');">Get the object</a>
クリックしてもどこにも表示されなくなりますが、ページが現在のビューポートから自分自身の中心に戻る可能性があります。これはきれいではありません。A HREFを使用してインラインJavaScriptを提供する最良の方法は何ですか?ただし、上記のいずれも行う必要はありませんか?JavaScript:void(0);
<A HREF="JavaScript:void(0);" onclick="var elem = document.getElementById('foo');">Get the object</a>
これはブラウザにNOWHEREに移動するよう指示しますが、代わりに有効なJavaScript:void(0);を実行します。空白が含まれておらず、URLとして解析されないため、HREFタグの最初の関数。代わりに、コンパイラーによって実行されます。VOIDは、0のパラメーターを指定するとUNDEFINEDを返すキーワードです。これは、0を指定せずに発生する戻り値を処理するためにこれ以上のリソースを使用しません(メモリ管理/パフォーマンスが向上します)。
次に発生するのは、OnClickが実行されることです。ページは移動しません。表示に関しては何も起こりません。
<a>
要素は常にどこかに移動する必要があると私は考えています。ページ上でJavaScriptを実行するだけの場合は、<button>
代わりにを使用する必要があります。使用すること<button>
はどちらもよりセマンティックであり、アンカーのにハッキングするものについてのこの全体的な議論からあなたを解放しますhref
。 編集:@Ronnie Roystonの以下の答えはすでにこの議論をカバーしているようです。
JavaScript:URLは別として。これは、voidが短いコードを書くのに役立つ場所です。
var error1 = false,
error2 = false,
error3 = false;
function error1() {
error1 = true;
}
function myFunction() {
// You can easily return and call a function at once, if you don't care about myFunction's return value
if (!someCondition1)
return error1();
// What if you want to set a value first?
if (!someCondition2) {
error2 = true;
return
}
// Shortest way to return and set a value at once
if (!someCondition3)
return void(error3 = true);
// More code goes here
}
javascript:
は、多くのURIスキームの1つです:en.wikipedia.org/wiki/URI_schemeなどdata:
。