ハイパーリンクをクリックしてjavascript関数を呼び出す


回答:


133

それでも、typical href="#"orまたはhref="javascript:void"orの代わりに、href="whatever"これははるかに理にかなっていると思います。

var el = document.getElementById('foo');
el.onclick = showFoo;


function showFoo() {
  alert('I am foo!');
  return false;
}

<a href="no-javascript.html" title="Get some foo!" id="foo">Show me some foo</a>

Javascriptが失敗した場合、いくつかのフィードバックがあります。さらに、不規則な動作(の場合はページジャンプ、の場合はhref="#"同じページにアクセスするhref="")が排除されます。


13
+1これは現在唯一の目立たない答えです。できれば+100。
James

@Lewis、はい、理想的には<a>タグは純粋なjs呼び出しには使用されませんが、残念ながら古いブラウザは非リンク要素の:hoverをサポートしていませんでした。そのため、リンクはjsイベントをトリガーするためによく使用されていました。
Chris Van Opstal 2009

@クリス-あなたが私のポイントクリスを得るかどうかはわかりません。<ahref = "#">何もしない</a>を使用せず、代わりに<ahref = "a / link /somwhere.html">何かを行う</a>を使用してから使用することをお勧めしますhrefをオーバーライドするプログレッシブエンハンスメント。これが最もクリーンなソリューションです。アンカーは問題ありませんが、JavaScriptが無効になっている場合、または何らかの理由で(IE6のように)ハンドラーが作成されて割り当てられる前にJavaScriptが壊れた場合は、何らかの処理を行う必要があります。このようにして、すべてのユーザーが満足しています。
ルイス

2
私には機能しません。ページの読み込み時にonclick関数を自動的に実行します。これは、アクセシビリティが懸念される悪夢のようにも思えます。
ショーンソロモン

4
これは機能しません。hrefのURLに移動するだけです。
paddotk 2014年

58

すべての中で最も簡単な答えは...

<a href="javascript:alert('You clicked!')">My link</a>

または、JavaScript関数を呼び出す質問に答えるには:

<script type="text/javascript">
function myFunction(myMessage) {
    alert(myMessage);
}
</script>

<a href="javascript:myFunction('You clicked!')">My link</a>


2
StackOverflowの「コードスニペットの実行」のリンクはFirefoxでは機能しません(アラートは作成されません)が、このタイプのリンクを通常のWebページに配置するとFFで機能します。
the_pwner2 2419年

はい、それは奇妙です、それは私のために働いていました、今はそうではありません。他の人も同様の問題を抱えていて、Firefoxを完全に再インストールする以外に決定的な解決策はないようです。
ジェイデンローソン

26

onclickパラメータを使用して...

<a href='http://www.google.com' onclick='myJavaScriptFunction();'>mylink</a>

紛らわしい声明。それはgoogle.comに行くのですか、それともjavascript関数を呼び出すのですか?どちらが優先されますか?
Nguai al

12

JQueryの答え。JavaScriptはJQueryを開発するために発明されたので、これを行うJQueryの例を示します。

<div class="menu">
    <a href="http://example.org">Example</a>
    <a href="http://foobar.com">Foobar.com</a>
</div>

<script>
jQuery( 'div.menu a' )
    .click(function() {
        do_the_click( this.href );
        return false;
    });

// play the funky music white boy
function do_the_click( url )
{
    alert( url );
}
</script>

53
JavaScriptはjQueryを開発するために発明されましたか?それは新しいものです!
palswim 2010年

35
これは、レゴがレゴバットマンを作るために発明されたことを読んだようなものでした。
ショーンソロモン

5
@ShawnSolomon同意できてうれしいです:)
elcuco 2012年

1
@elcuco、素晴らしい皮肉!+ 'd :) Long Live JQuery
Zuul 2012年

6

私はjavascriptハイパーリンクのhrefよりもonclickメソッドを使用することを好みます。また、常にアラートを使用して、どのような価値があるかを判断してください。

<a href='#' onclick='jsFunction();alert('it works!');'>Link</a>

入力タグにも使用できます。

<input type='button' value='Submit' onclick='jsFunction();alert('it works!');'>


3

理想的には、各リンクの「マークアップ」に変更を加えるたびにコードを再コンパイルする必要があるため、コードの背後にリンクを生成することは避けます。あなたがそれをしなければならないなら、私はあなたのJavaScriptの「呼び出し」をあなたのHTMLの中に埋め込まないでしょう、それは完全に悪い習慣です、あなたのマークアップはそれが何をするかではなくあなたの文書を説明するべきです、それはあなたのjavascriptの仕事です。

各要素(またはその共通機能の場合はクラス)に特定のIDがあるアプローチを使用してから、プログレッシブエンハンスメントを使用して次のようなイベントハンドラーを追加します。

[c# example only probably not the way you're writing out your js]
Response.Write("<a href=\"/link/for/javascriptDisabled/Browsers.aspx\" id=\"uxAncMyLink\">My Link</a>");

[Javascript]  
document.getElementById('uxAncMyLink').onclick = function(e){

// do some stuff here

    return false;
    }

そうすれば、JSが無効になっているユーザーのコードが壊れることはなく、関心の分離が明確になります。

それがお役に立てば幸いです。


1
なぜC#なのか?なぜだけではないの<a href="https://stackoverflow.com/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>ですか?
Mahmoodvcs 2013

2

通常、onclickイベントを直接設定するよりもelement.attachEvent(IE)またはelement.addEventListener(他のブラウザー)を使用することをお勧めします。後者はその要素の既存のイベントハンドラーを置き換えるためです。

attachEvent / addEventListeningを使用すると、複数のイベントハンドラーを作成できます。


1

onclickHTML属性を使用します

onclickイベントハンドラは、先の要素に、ユーザーのマウスボタンからクリックイベントをキャプチャし onclick、属性が適用されます。このアクションにより、通常、JavaScript関数などのスクリプトメソッドが呼び出されます[...]


1

ページが読み込まれるのを待たないと、IDで要素を選択できなくなります。このソリューションは、コードの実行に問題がある人に役立つはずです

<script type="text/javascript">
window.onload = function() {
    document.getElementById("delete").onclick = function() {myFunction()};

    function myFunction() {
        //your code goes here
        alert('Alert message here');
    }
};
</script>

<a href='#' id='delete'>Delete Document</a>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.