2017-11-19 5 views
0

a要素にonclickを実装するのが違っていますが、わかりませんどのようにイベントがどのように違うのですか?hrefを省略してアンカー要素にonclickを実装

私はa上でクリックしたときに何をしたい私はonclick eventは何もしないhrefせずに起こる持っていると思います。私の場合に使用するための適切なものである

<a href="#" onclick="myFunc()">Submit</a>
<a href="javascript:void(0);" onclick="myFunc()">Submit</a>
<a href="javascript:;" onclick="myFunc()">Submit</a>

+1

[どの "HREF" 値Iは、JavaScriptのリンクのために使用する必要があり、 "#" や「ジャバスクリプトの可能性のある重複します。void( 0) "?](https://stackoverflow.com/questions/134845/which-href-value-should-i-use-for-javascript-links-or-javascriptvoid0) –

+1

[HREFを無効にするにはどうすればよいですか?もしonclickが実行されていたら?](https://stackoverflow.com/questions/15622100/how-can-i-disable-href-if-onclick-is-executed) –

答えて

1

今日のJS開発では、インラインJavaScriptが非常に嫌なので、これらの例は本当に適切なものではありません.HTML/JSの分離が最も良い方法です。

したがって、HTMLページから呼び出された別のJSファイル(<script></body>の直前に置き、スクリプトが実行される前にDOMが確実にロードされるようにする)でアンカーをつかんで、それぞれを呼び出すイベントリスナーを追加します対応する関数。

let anchors = document.querySelectorAll('a'); 
[...anchors].forEach(anchor => anchor.addEventListener('click', handleAnchor, false)); 

は、その後、あなたの機能で、あなたがイベントを渡すことを確認し、無効にHREFを停止する preventDefault()を呼び出します。

function handleAnchor(e) { 
    e.preventDefault(); 
    ... 
} 

MDNリソース

+0

ありがとう、@ GetOffMyLawn。 – Andy

+0

document.querySelectorAllはNodeListを返しますが、配列の配列メソッドを呼び出すことはできません。 – YouneL

+0

明らかに私たちは両方とも正しいです: "BlinkブラウザとFirefox 50+のみで動作し、SafariやIE/Edgeサポートはありません" – Andy

関連する問題