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

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

新規登録して質問してみよう
ただいま回答率
85.49%
jQuery Mobile

jQuery Mobileとはスマートフォンとタブレット用に最適化されたフレームワークです。様々な携帯端末にjQueryで作られたユーザーインターフェイスシステムを提供します。

JavaScript

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

Q&A

解決済

1回答

645閲覧

JavaScriptでclickイベントではpageYなどが返されるのに、inputイベントでは返されない理由

nikuatsu

総合スコア177

jQuery Mobile

jQuery Mobileとはスマートフォンとタブレット用に最適化されたフレームワークです。様々な携帯端末にjQueryで作られたユーザーインターフェイスシステムを提供します。

JavaScript

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

0グッド

0クリップ

投稿2022/02/17 10:05

編集2022/02/17 10:05

初めて知ったのですが、clickイベントではevent.pageYなどが返されるのに、inputイベントでは返されません。

合理的な理由が考えつかないのですが、なぜこういう仕様なのかご存じの方いらっしゃいますでしょうか?

HTML

1<input type="text" class="target"/>

jQuery

1$(document).on('click', '.target', function(event){ 2 console.log('click', event.pageY); // 返される 3}); 4 5$(document).on('input', '.target', function(event){ 6 console.log('input', event.pageY); // 返されない 7});

inputイベントのときにもこの値は返された方が絶対に便利だと思いませんか!?

返されないことにメリットがあるのでしょうか?
それともプログラム言語あるあるな、何か歴史的な経緯でこうせざるを得なかった。とかでしょうか?

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

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

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

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

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

Zuishin

2022/02/17 13:28

スマホにはマウスカーソルの位置がありません。 無いものを返すのは非合理です。
nikuatsu

2022/02/17 13:38

スマホでマウスカーソルの位置がないことはclickイベントもiputイベントも同じだと思いますので関係ないと思います。
Zuishin

2022/02/17 13:44

タップされた場所を知る必要があるでしょう。
nikuatsu

2022/02/17 14:05

その点は間違いございませんが、質問はinputされた場所を知る必要の話ですよ。スマホに言い換えるなら、タップされた場所は知れるのに、inputされた場所が知れない。なぜか?という話です。これにカーソルの位置は関係ありませんし、タップされた場所という点は質問の逆接条件を繰り返しているだけです。
Zuishin

2022/02/17 14:06

キーボードイベントでタップされてない場所を知る必要はないからですね。
nikuatsu

2022/02/17 14:19

入力しているinputの場所を知って、そのすぐ下にサジェストを出したい。ってありますよね?
Zuishin

2022/02/17 14:27

常に知る必要はないですよね。 input の場所なら他の手段で知ることができるので。
nikuatsu

2022/02/17 14:38

常に知る必要がない点も、他の手段で知ることができる点も、全く仰る通りだと思います。しかしいずれもclickで取得できるのにinputでは取得できないという疑問への答えにはなっていません。それが答えであればclickも同様に常に知る必要がなく、また他の手段で取得できるためです。
Zuishin

2022/02/17 14:39

タップされた場所をどうやって知ることができますか?
Zuishin

2022/02/17 14:51

イベントの引数から取得しているようですが?
nikuatsu

2022/02/17 14:54

仰る通りだと思います。
Zuishin

2022/02/17 14:55

ということは、タップの場合、その引数は必要なのでは?
nikuatsu

2022/02/17 15:05

ああなるほど。「他の手段」は「引数があること以外」の意味でしたか。私は端的に「event.pageY」のみを意味していました。であれば改めて23:38に議論を戻しましょう。さて 常に知る必要がない点も、他の手段で知ることができる点も、全く仰る通りだと思います。しかしいずれもclickで取得できるのにinputでは取得できないという疑問への答えにはなっていません。なぜなら他の手段で実現可能であることは、inputでの「event.pageY」が不可能であることの根拠にはならないからです。 例えるなら、右折したら近道なのに左折しかできない道について、「左折という手段があるのだから右折はできなくていいだろう」と言うのと同じことですね。これが根拠になっていないことはご理解頂けるかと思います。
Zuishin

2022/02/17 15:08 編集

右折しなくて良い道(特に不便にならない道)なので、右折できなくても大丈夫です。
nikuatsu

2022/02/17 15:18

ははは。ありがとうございました。
Zuishin

2022/02/17 15:22

> 例えば入力しているinputの場所を取得してサジェストを出したい。ってありますよね?この目的のために位置を返せたら合理的だと思いますが…どうですか? いいえ。 クリックした位置を基準にサジェストを出すと、サジェストの位置がそのたびに変わります。 クリックした位置ではなく、input の位置を基準に出すのが良いでしょう。 > inpuイベントのeventには、pageYなどのキーが実際に見受けられます。 どうすればそれが確かめられますか? input の送信するイベントでは、キーイベントとマウスイベントが(他にも)あり、マウスイベントではマウスカーソルの位置が送られます。 しかし、キーイベントでマウスカーソルの位置を知りたくなるようなことはありませんし、実際にそのキーがどこにあるのか見つけることができませんでした。 https://developer.mozilla.org/ja/docs/Web/API/InputEvent どれの話をしていますか?
Zuishin

2022/02/17 15:23

ははは。
nikuatsu

2022/02/17 15:32

「ははは」は「うまいこと言いますね」と親しみを込めて言ったのですが、なにか勘に障りましたか…。申し訳ございません。 さてご指摘の2点、続けさせて頂きます。 >クリックした位置ではなく、input の位置を基準に出すのが良いでしょう 私もそう書いています。 >どうすればそれが確かめられますか? 次のconsoleで確かめられると思います。 https://jsfiddle.net/5w8xopgt/
Zuishin

2022/02/17 15:33

ははは。 それで確認できたと思ったんですか。
nikuatsu

2022/02/17 15:35

お詫び申し上げたと思ったのですが、受け入れられず残念です…。本当に申し訳ございませんでした。 さて先の確認には不足があるとのこと、よろしければ教えて頂けますか?
Zuishin

2022/02/17 15:38

そこに jQuery.event と書いてありますよね?
nikuatsu

2022/02/17 15:39

ご指導ありがとうございます。はい。書いてあります。
Zuishin

2022/02/17 15:41

ではそれでわかったでしょう? jQuery.event というクラスを使いまわしているだけで、実装はされていません。
nikuatsu

2022/02/17 15:47

どうやら基礎知識なのですね。 独学でそういった部分をすっとばしてきたために理解が追いつきません。 ・jQuery.event というクラスとは何か? ・それはどこから使いまわされたのか? event には .target にまつわるものだけが入るという理解なので、使いまわしというのは意外です。しかしご面倒でしょうから、なにか周辺知識のキーワードなどだけでも教えて頂けませんでしょうか。
Zuishin

2022/02/18 04:29 編集

JavaScript では、マウスイベントとキーボードイベントで別のクラスのオブジェクトが送信されます。 jQuery はそれを受け取り、jQuery.Event というオブジェクトを作り、それを代わりに送信します。 https://api.jquery.com/category/events/event-object/ jQuery.Event は、様々なイベントで使えるように、不要なプロパティも宣言されています。 event.type によってイベントの種類が指定されているので、コーダーはそれを見て必要なプロパティだけを参照するようになっています。 pageY は undefined でしょう? 使われてないんですよ。
nikuatsu

2022/02/17 15:57

なるほど。素人があれこれと申し訳ございませんでした。肥大化というのが1つの根拠として適切であったと納得できました。ありがとうございます。
guest

回答1

0

ベストアンサー

合理的な理由が考えつかないのですが

キーボードで入力した場合、何を返せばいいのか合理的な値がわかりません。

投稿2022/02/17 11:14

maisumakun

総合スコア145183

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

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

nikuatsu

2022/02/17 11:37

そうですか?例えば入力しているinputの場所を取得してサジェストを出したい。ってありますよね?この目的のために位置を返せたら合理的だと思いますが…どうですか?
maisumakun

2022/02/17 11:44

inputはキーボードのイベント、clickはマウスのイベント、という根本的なところが違います。
nikuatsu

2022/02/17 11:58

根本的な違いがなぜ合理性を下げる要因になるのでしょうか?合理性は有益性や整合性でもってその程度が判定されるものですよね?根本的な違いとやらは整合性の観点で合理性を下げますが、提示した有益性を超えるものだとは思えません。例えばキーボードはABCという整合性よりも、よく使うという有益性がより大きく評価されるゆえに、この並びが合理的だと判定されます。同様に根本的な違いとやらよりも提示した有益性が大きく評価されてしかるべきだと思いますが…どうですか?
nikuatsu

2022/02/17 12:03

まぁ、なんでもいいですねwご回答ありがとうございました。面倒な返信してすみません。ご返答は結構です。
maisumakun

2022/02/17 13:36

そうやって、あらゆる場面を想定してイベントオブジェクトが肥大化していったらどうしますか? 「必要かつ十分な値だけをやり取りする」というのも、1つの合理性です。
nikuatsu

2022/02/17 13:43

その文には同意しますが、残念ながら今回の文脈には当てはまりません。inputイベントのeventにも、pageYのキーがあるためです。肥大化への配慮が根拠ならばキーを設けないと思います。
maisumakun

2022/02/17 14:20

> 肥大化への配慮が根拠ならばキーを設けないと思います。 いえ、JavaScriptは存在しないキーにアクセスしてもエラーにならずundefinedを返すだけです。
nikuatsu

2022/02/17 14:34

それは知っています。肥大化が根拠だというご主張に対し、ならばキーが存在する時点で肥大化していおり、値だけがないのだから根拠として不適当ではないか?というのが現在の論点です。(もしかしてキーが存在しないとお考えですか?であれば確認してみてください。inpuイベントのeventには、pageYなどのキーが実際に見受けられます。)
nikuatsu

2022/02/17 15:58

その後Zuishinさんとのやりとりで肥大化に納得できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問