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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1039閲覧

JQueryを使って一つのイベントハンドラで複数の関数を実行したい。

SaganoKei

総合スコア13

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/06/23 14:28

編集2018/06/23 15:59

発生している問題

幾つかのテキストボックスの入力内容を、入力時と送信ボタン押下時の2パターンで検査したいとき、
送信ボタンを押したときに4つの関数を一つのイベントハンドラで呼び出すにはどうすればよいでしょうか。

該当のソースコード

lang

1 2const checkNo = function(){// 処理} 3const checkName = function(){// 処理} 4const checkSex = function(){// 処理} 5const checkMail = function(){// 処理} 6 7$(function () { 8 $("#No").on('blur keypress', checkNo); 9 $("#Name").on('blur keypress', checkName); 10 $("#Sex").on('blur keypress', checkSex); 11 $("#Mail").on('blur keypress', checkMail); 12 13 $("#btn").on( 14 'click', checkNo, checkName, checkSex, checkMail 15 ); 16}); 17

試したこと

送信ボタン4つ分の同じclickイベントハンドラを書いてそこに各々の関数呼び出しを記述すれば機能自体は満たせるのですが、すごい冗長でスマートでないなぁと・・・
一つのイベントハンドラに纏める方法があれば教えて欲しいです。

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

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

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

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

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

jun68ykt

2018/06/24 00:30 編集

こんにちは。回答を考えてコードを書きました。https://jsfiddle.net/jun68ykt/enxzrfq1/70/ これは4つのテキストと1つのボタンの計5個の <input /> の click イベントを一つのイベントハンドラで処理します。 ですが、実現されたいことは、ボタンのクリックハンドラで4つの関数をまとめたいということだったのですね。質問の趣旨を勘違いしていたようです。
SaganoKei

2018/06/24 00:54

いえ、ソースコード見せていただきましたが、自分の引き出しにない書き方ばかりですごく勉強になりました! もしよければ先のソースコードの書き方を学ぶのに参考になるサイトとかあれば教えていただきたいです。
jun68ykt

2018/06/24 15:44 編集

「自分の引き出しにない書き方ばかりですごく勉強になりました!」とのことでよかったです!「もしよければ先のソースコードの書き方を学ぶのに参考になるサイトとかあれば教えていただきたいです。」との件については、長くなりそうだったので回答欄のほうに返答を書きました。
guest

回答2

0

ベストアンサー

javascript

1 $("#btn").on( 2 'click', function() { 3 checkNo(); 4 checkName(); 5 checkSex(); 6 checkMail(); 7 } 8 );

投稿2018/06/23 14:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

SaganoKei

2018/06/23 17:35

回答ありがとうございます その方法で書いてみたこともあったんですけど、なぜかその時は失敗したんですよね・・・なんでだろう ともかく書き直したらちゃんと動いたので助かりました!
guest

0

こんにちは。

「質問への追記・修正、ベストアンサー選択の依頼」欄のほうで

もしよければ先のソースコードの書き方を学ぶのに参考になるサイトとかあれば教えていただきたいです。

とのご要望を頂きましたので、以下にて5点ほどピックアップして回答します。

(1) Shorthand method names (ES2015)

オブジェクトのプロパティで、関数であるもの

javascript

1const checkers = { 2 Mail: function() { return 'OK'; } 3};

javascript

1const checkers = { 2 Mail() { return 'OK'; } 3};

と詰めて(=shorthand)書けます。これは MDN: オブジェクト初期化子 の中のShorthand method names (ES2015) です。

(2) first-class object

元のご質問にあるコード

javascript

1const checkNo = function(){// 処理} 2const checkName = function(){// 処理} 3const checkSex = function(){// 処理} 4const checkMail = function(){// 処理}

だったり、

javascript

1const checkers = { 2 Mail() { return 'OK'; } 3};

のように関数を、const checkNo に代入したり、オブジェクトcheckers のプロパティとして書けます。
これは JavaScript の関数が第一級オブジェクトであるからです。

JavaScript において、関数は第一級オブジェクトです。すなわち、関数はオブジェクトであり、他のあらゆるオブジェクトと同じように操作したり渡したりする事ができます。具体的には、関数は Function オブジェクトです。

以上、MDN: 関数と関数スコープ より引用

(3) Object.entries()

javascript

1 const result = 2 Object.entries(checkers) 3 .reduce((r,e) => { r[e[0]] = e[1](); return r; } ,{});

と書いているところで、 Object.entries() を使っています。これはES2017で標準になっています。

(4) Array.prototype.reduce()

上記 (3) のコードで Array.prototype.reduce() を使っています。使いこなせると便利な関数です。

(5) ES2016, 17, 18 で導入された新しい関数、書き方等について

私は、

を、一通り読んで、動かして確認できるものは簡単なコードを書いてみたうえで、
ブックマークに入れていますが、日本語だとYuta Yamamotoさん@qiita の

が分かりやすいです。

 

さて、以上(1)から(5)までトピックを挙げましたが、「質問への追記・修正、ベストアンサー選択の依頼」欄で頂戴した、

もしよければ先のソースコードの書き方を学ぶのに参考になるサイトとかあれば教えていただきたいです。

とのご要望に、個々の点では回答できているけれども、より本質的に求められていることの
回答には全くなっていない気もしています。

というのは、そもそも元のご質問の「該当のソースコード」を見たときに、「質問への追記・修正、
ベストアンサー選択の依頼」に挙げましたコード (※これがベストなリファクタ案とは思っていませんが。)にリファクタできる、または、コードを書き始める以前に、「こういう風に書ける or 書き直せるはず。やってみよう」と着想できるようになるためにはどうしたらいいか?
という問いこそが、

もしよければ先のソースコードの書き方を学ぶのに参考になるサイトとかあれば教えていただきたいです。

というご要望の真意であるとすれば、上記5点に並べた個々の、言ってしまえば、断片的な知識を
「ふ〜ん。そうなんだ。」みたいな感じで知っていても、(物知りにはなれるでしょうけれど、)

先のソースコードの書き方を学ぶ

こと (の、必要条件ではあるかもしれないが、十分条件)には、多分なっていないからです。

上記の懸念はありますが、とりあえず以上を一次回答とさせていただき、
さらなる疑問点などありましたら、ご質問頂ければと思います。

投稿2018/06/24 13:38

編集2018/06/24 22:10
jun68ykt

総合スコア9058

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問