🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

2回答

846閲覧

btn.addEventListenerから呼ぶ関数に任意引数を渡すことはできますか。

eojvkx

総合スコア13

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2019/02/03 02:36

編集2019/02/04 00:12

前提・実現したいこと

javascriptでaddEventListenerから呼ぶ関数に
任意引数を持たすことはできますか。

要件:eventを取得しつつ、引数を渡したい

該当のソースコード

■■ここまでは確認しています。■■
MouseEventと同時に任意引数を含めたい

var btn = document.getElementById('btn'); btn.addEventListener('mousedown', MouseDownXxx) function MouseDownXxx(evt: MouseEvent) { let xz let yz xz = evt.x yz = evt.y }

■■やりたいことのイメージ■■

var btn = document.getElementById('btn'); var 任意引数 btn.addEventListener('mousedown', MouseDownXxx(evt, 任意引数)) function MouseDownXxx(evt: MouseEvent, 任意引数) { let xz let yz let goukei xz = evt.x yz = evt.y   goukei = 任意引数 + xz  console.log(goukei ); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/02/03 05:05

(質問文は編集できます)質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
eojvkx

2019/02/04 00:13

修正しました。ご指摘いただきありがとうございました。
guest

回答2

0

ベストアンサー

Function.prototype.bind

this束縛。

JavaScript

1btn.addEventListener('mousedown', handleMousedown.bind({xz: 0, yz: 0}), false);

引数束縛。

JavaScript

1btn.addEventListener('mousedown', handleMousedown.bind(btn, xz, yz), false); // 既存の引数は後ろに追い出される(eventは第三引数となる

handleEvent

this束縛。

JavaScript

1btn.addEventListener('mousedown', { 2 xz: 0, 3 yz: 0, 4 handleEvent: handleMousedown 5}, false);

data-*属性

HTML

1<input type="button" data-xz="0" data-xy="0" value="sample" /> 2<script> 3'use strict'; 4const button = document.querySelector('input[type="button"]'); 5 6button.addEventListener('mousedown', function handleMousedown (event) { 7 const input = event.target; 8 9 const xz = input.getAttribute('data-xz'); 10 const xy = input.getAttribute('data-xy'); 11}, false); 12</script>

WeakMap

JavaScript

1const wm = new WeakMap([[btn, {xz: 0, xy: 0}]]); 2 3button.addEventListener('mousedown', function handleMousedown (event) { 4 const position = wm.get(event.currentTarget); 5 6 const xz = position.xz; 7 const xy = position.xy; 8}, false);

Re: eojvkx さん

投稿2019/02/03 05:54

編集2019/02/03 06:00
think49

総合スコア18189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eojvkx

2019/02/04 02:46

下記の.bind方法でうまくできました。 ありがとうございました。 btn.addEventListener('mousedown', handleMousedown.bind(btn, xz, yz), false); // 既存の引数は後ろに追い出される(eventは第三引数となる
guest

0

無名関数を挟むのが手っ取り早いかと思います。

typescript

1var btn = document.getElementById('btn'); 2var arg; 3btn.addEventListener('mousedown', evt => MouseDownXxx(evt, arg)) 4

投稿2019/02/03 04:52

maisumakun

総合スコア145975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eojvkx

2019/02/04 02:08

var btn = document.getElementById('btn'); var arg=1; var evt : MouseEvent btn.addEventListener('mousedown', xxx=> MouseDownXxx(evt, arg)) 下記の様にvar evt:MouseEventを宣言して、任意の引数を 渡すことはできたのですが、 evtの中身がundefindeになります(何もセットしていないので当たり前ですが) evtの値を取得するにはどのような記述をすれば良いのでしょうか。
maisumakun

2019/02/04 02:15

外側でのevtの宣言は不要です。無名関数に渡ってくるxxx自体がイベントオブジェクトなので、それをそのままMouseDownXxxに渡してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問