onclickイベントで複数のJavaScript関数を呼び出す方法は?


回答:


390
onclick="doSomething();doSomethingElse();"

しかし、実際には、onclickJavaScriptコードを使用して、イベントハンドラーをまったく使用せずに、DOMノードにイベントハンドラーをアタッチする方がベターです。これは控えめなjavascriptとして知られています。


1
控えめなJSへの言及をありがとう、私は以前にこれに遭遇しました、そして私が怠惰だからといって邪魔なJSを書くことは控えるべきです!xD
Qcom

9
問題はありません... jQueryを強くお勧めします。jQueryは、目立たない目標を達成するのに役立ちます。イベントハンドラーをDOM要素に簡単にアタッチし、さらに多くのことを控えめに実行できます。私は2年間使用しており、振り返ることはありません。
ブラッド

4
onclickで呼び出されたアクションの1つが失敗すると、全体がドミノチェーンのようになり、onclickが機能しなくなります。
Fiasco Labs

8
このhtml属性は実際にonclick=""はありませんonClick=""。これはよくある間違いです。
DrewT 2015

2
@ShubhamChopra何のことをいっていることはありjsxませんhtmlし、この質問がでタグ付けされていないjsx
DrewT

75

1つの関数が定義されたリンク

<a href="#" onclick="someFunc()">Click me To fire some functions</a>

からの複数の関数の実行 someFunc()

function someFunc() {
    showAlert();
    validate();
    anotherFunction();
    YetAnotherFunction();
}

5
私見、これは真のプログラマーのアプローチです。
b1nary.atr0phy 2012

2
@ b1nary.atr0phyいいえ。プログラマーの方法は、ユーザーがJavaScriptを持たない場合のhref = ""属性を追加することです。次に、JavaScriptを使用して(ユーザーがサポートしていることを確認)、hrefを削除し、イベントリスナーをイベントに追加します。そうすれば、コードの別のモジュールが同じクリックをリッスンしても、上書きされないか、コードが上書きされます。読む:developer.mozilla.org/en-US/docs/Web/API/Event
gcb

3
関数に渡される引数がある場合、特にサーバー側の言語からそれらの引数を生成する場合、これはうまく機能しない可能性があります。サーバーとクライアントの両方で可能なすべての反復をテストするよりも、サーバー側の言語内で関数(引数を含む)を追加することにより、コードをビルド/メンテナンスする方が簡単です。
サイフォン2014

これはとても美しくエレガントです
Tessaracter

38

これは、jQueryではなくJavaScriptのみを使用している場合に必要なコードです

var el = document.getElementById("id");
el.addEventListener("click", function(){alert("click1 triggered")}, false);
el.addEventListener("click", function(){alert("click2 triggered")}, false);

7
これは正しい答えであり、正しい方法である必要があります。
Fusion

11

element.addEventListenerメソッドを使用して関数にリンクします。その関数から複数の関数を呼び出すことができます。

イベントを単一の関数にバインドしてから複数の関数を呼び出す利点は、エラーチェックを実行し、if elseステートメントを使用して、特定の条件が満たされた場合にのみ一部の関数が呼び出されることです。


9

もちろん、それに複数のリスナーをバインドするだけです。

Short cutting with jQuery

$("#id").bind("click", function() {
  alert("Event 1");
});
$(".foo").bind("click", function() {
  alert("Foo class");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo" id="id">Click</div>


@hunter:私はjQueryで近道をしていました。ネイティブイベントリスナーコードを正確に覚えていません。Markoが言うことを行うこともできますが、イベントリスナーを使用することをお勧めします。
ジョシュK

1
元の質問には答えなかったかもしれませんが、私はjQueryを使用しているので、私の質問に答えました。
Fiasco Labs

1
これをプレーンな古いJavaScriptで行う方法はありますか?
CodyBugstein 2014年

4

ES6 React

<MenuItem
  onClick={() => {
    this.props.toggleTheme();
    this.handleMenuClose();
  }}
>

2
@これはJSXです。この質問はjsxでタグ付けされていません
Shubham Chopra

2

var btn = document.querySelector('#twofuns');
btn.addEventListener('click',method1);
btn.addEventListener('click',method2);
function method2(){
  console.log("Method 2");
}
function method1(){
  console.log("Method 1");
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Pramod Kharade-Javascript</title>
</head>
<body>
<button id="twofuns">Click Me!</button>
</body>
</html>

1つ以上のメソッドで1つのイベントを達成/呼び出すことができます。


1

onclickhtmlに2番目の属性があり、それが無視されclick2 triggeredて印刷されない場合でも、コードによってのみ複数を追加できますmousedown。アクションに1つ追加できますが、これは単なる回避策です。

したがって、最善の方法は、次のようにコードで追加することです。

var element = document.getElementById("multiple_onclicks");
element.addEventListener("click", function(){console.log("click3 triggered")}, false);
element.addEventListener("click", function(){console.log("click4 triggered")}, false);
<button id="multiple_onclicks" onclick='console.log("click1 triggered");' onclick='console.log("click2 triggered");' onmousedown='console.log("click mousedown triggered");'  > Click me</button>

イベントが山積みになる可能性があるので注意する必要があります。多くのイベントを追加する場合は、それらが実行される順序の数を失う可能性があります。


1

さらに、保守可能なJavaScriptの場合、名前付き関数を使用します。

これは無名関数の例です:

var el = document.getElementById('id');

// example using an anonymous function (not recommended):
el.addEventListener('click', function() { alert('hello world'); });
el.addEventListener('click', function() { alert('another event') });

しかし、同じ要素にそれらの2つがアタッチされていて、そのうちの1つを削除したいとします。そのイベントリスナーから単一の無名関数を削除することはできません。

代わりに、名前付き関数を使用できます。

var el = document.getElementById('id');

// create named functions:
function alertFirst() { alert('hello world'); };
function alertSecond() { alert('hello world'); };

// assign functions to the event listeners (recommended):
el.addEventListener('click', alertFirst);
el.addEventListener('click', alertSecond);

// then you could remove either one of the functions using:
el.removeEventListener('click', alertFirst);

これにより、コードの読み取りと保守がはるかに容易になります。特に関数が大きい場合。


詳細については、「tutorialist」Avelxは、私がこの主題に関するお勧めすることができます素敵なビデオを持っていますyoutube.com/watch?v=7UstS0hsHgI
レミ

0

すべての関数を1つにまとめて呼び出すことができます。Ramdajsのようなライブラリには、複数の関数を1つにまとめる機能があります。

<a href="#" onclick="R.compose(fn1,fn2,fn3)()">Click me To fire some functions</a>

または、コンポジションをjsファイルに別の関数として入れて呼び出すことができます

const newFunction = R.compose(fn1,fn2,fn3);


<a href="#" onclick="newFunction()">Click me To fire some functions</a>

0

これはブラッドアンサーの代わりです-次のようにカンマを使用できます

onclick="funA(), funB(), ..."

ただし、このアプローチは使用しない方が適切です。小規模なプロジェクトでは、1回の関数呼び出しの場合にのみonclickを使用できます(詳細:控えめなJavaScriptが更新されました)。

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