質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

Q&A

解決済

1回答

1083閲覧

javascript: addEventListenerを複数選択する方法

nanase21

総合スコア144

JavaScript

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

0グッド

0クリップ

投稿2019/11/09 02:38

編集2019/11/09 03:26

実現したい事
フォームで入力している内容をリアルタイムで監視して入力内容が求めている記載方法に一致しているかを判定したいです。

困っている事
下記の記述で、PCからの入力では特に問題なく動作します。しかし、スマホで試してみると、スマホでフォームにコピペをすると発火しなくて困っています。(コピペした後に一文字空白を入れると発火はします)

解決したい事
スマホでの入力時にコピペをしても下記のaddEventListenerの処理が走るようにしたい。

addEventListenerkyeup以外にpasteも入れればいいのかなと思ったのですがaddEventListenerに複数のイベントリスナーをつける方法が分からなくて困っています。

js

1(function () { 2 'use strict'; 3 var text = document.getElementById("mail"); 4 var other = document.getElementById("label"); 5 6 inputText.addEventListener('keyup', function() { 7 var s = text.value; 8 var check = !!s.match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/); 9 if(!!s && check){ 10 other.textContent = "Good"; 11 }else{ 12 other.textContent = "Bad"; 13 } 14 }, false); 15})();

現状の打開策
下記のようにaddEventListenerを二つ作る事でやりたいことを実現はできます。
しかし、処理内容がほぼ一緒なのでなんとかして1つにまとめる方法について知りたいです。

js

1(function () { 2 'use strict'; 3 var text = document.getElementById("mail"); 4 var other = document.getElementById("label"); 5 6 inputText.addEventListener('keyup', function() { 7 var s = text.value; 8 var check = !!s.match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/); 9 if(!!s && check){ 10 other.textContent = "Good"; 11 }else{ 12 other.textContent = "Bad"; 13 } 14 }, false); 15 16 inputText.addEventListener('paste', function() { 17 var s = text.value; 18 var check = !!s.match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/); 19 if(!!s && check){ 20 other.textContent = "Good"; 21 }else{ 22 other.textContent = "Bad"; 23 } 24 }, false); 25})();

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

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

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

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

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

guest

回答1

0

ベストアンサー

スマホでの入力時にコピペをしても下記のaddEventListenerの処理が走るようにしたい。

inputイベントを使ってはどうでしょうか。「キーボードからの入力」「貼り付け」など、入力方法によらず中身が変化した時にイベントが動きます。


addEventListenerに複数のイベントリスナーをつける方法が分からなくて困っています。

こちらについては、「関数だけ別に用意してあとから複数セットする」のがいいかと思います。

javascript

1 var handler = function() { 2 var s = text.value; 3 var check = !!s.match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/); 4 if(!!s && check){ 5 other.textContent = "Good"; 6 }else{ 7 other.textContent = "Bad"; 8 } 9 } 10 inputText.addEventListener('keyup', handler, false); 11 inputText.addEventListener('paste', handler, false);

投稿2019/11/09 03:27

maisumakun

総合スコア145184

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

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

nanase21

2019/11/09 03:32

ご教示いただきありがとうございます。 > inputイベントを使ってはどうでしょうか。「キーボードからの入力」「貼り付け」など、入力方法によらず中身が変化した時にイベントが動きます。 input用のイベントを調べさせていただきました。 下記のoninputのことでしょうか? input.oninput = function()
maisumakun

2019/11/09 03:35

oninputを使ってもいいですが、addEventListenerでイベントの種類として'input'と指定することも可能です。
nanase21

2019/11/09 03:38

addEventListenerでも`input`と指定できるのですね。 @maisumakunさんならこのような実装をする時、oninputとaddEventListenerならどちらを使うのでしょうか? ご教示いただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問