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

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

詳細はこちら
JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2792閲覧

JSでスペースをクリックしたときに、それ以降のイベントを実行したくない

kannmuri

総合スコア42

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2019/10/17 16:58

###実現したいこと
inputイベントでtextareaへの入力を拾って、そこにスペースが入力された場合に、スペース入力以外何もしたくないです。

###該当のソースコード
流れはこうです。スペース入力時は「実行しました」のアラートを出したくないんです。

<textarea></textarea> <script> $(document).on('input','textarea', function(){ //スペースのときは以下アラートを実行したくない alert('実行しました'); }); </script>

###試したこと
めっさいろいろ試しました。まず普通にスペースのキーコード32でreturnしましたが、できません。「実行しました」がしれっとでてきます。

$(document).on('input','textarea', function(e){ if(e.keyCode==32){ alert('スペースなので実行しません'); return; } alert('実行しました'); });

returnじゃダメかと思いpreventDefaultなるものを見つけましたが、やはりだめ!

$(document).on('input','textarea', function(e){ if(e.keyCode==32){ alert('スペースなので実行しません'); e.preventDefault(); } alert('実行しました'); });

結局みつけたのがinputでなくkeydownにし、returnを使う方法です。(preventDefaultだとスペース入力がなくなってしまうためreturnにしました。)

これならスペースのときに「実行しました」はアラートされません。よっしゃ。

$(document).on('keydown','textarea', function(e){ if(e.keyCode==32){ alert('スペースなので実行しません'); return; } alert('実行しました'); });

しかし!keydownじゃなくてinputがいいんです。(keydownって何?って感じです。)

コメントボックスとかのためにkeydonwって使っていいんでしょうか?「input keydown 違い」で検索しても1つも出てきません…

思いっきりハマってまして、どうやったらいいと思いますか?

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

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

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

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

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

guest

回答2

0

inputは一文字入力(あるいは削除)するたびに発生しますが、
テキストエリアには一文字しか入力しないという前提ですか?
だとしたら、下記のコードで。

js

1$(document).on('input','textarea', function(e){ 2 if(this.value===" "){ 3 alert('スペースなので実行しません'); 4 } else { 5 alert('実行しました'); 6 } 7});

しかし!keydownじゃなくてinputがいいんです。(keydownって何?って感じです。)

keydown はキーボードで入力するたびに発生して、その時のキーコードを取得できます。

inputはテキストが変更されるたびに発生しますが、入力されたキーコードは取得できません。
this.value でテキストエリアのテキストを取得できます。

投稿2019/10/17 17:55

hatena19

総合スコア34073

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

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

kannmuri

2019/10/17 18:02

this.value知らなかったです。ありがとうございます。助かりました! でもテキストエリアはコメントボックスなので、一文字しか入力しないという前提ではないです。 そしたら、keydownにするしかありませんか?一文字しか入らないという前提ではなく、かつスペースのときイベント実行したくないというなら、keydownにするしかないでしょうか? ずっとinputでやってきたので、変えると予期しないことがおこりそうでなんか不安です。コメントボックスなどではinputとkeydownはどちらがいいと思いますか?ふつうinputですよね?そりゃ、仕様によるでしょうけど、どうでしょうか?
hatena19

2019/10/17 18:18 編集

ご希望のことの具体的な仕様を提示してもらえませんか。 一文字入力するたびにメッセージを表示するということは、ご希望のこととは違いますよね。 inputはテキストが変化したときにリアルタイムにそのテキストを取得するというのが主な用途です。 キー入力を監視するなら、keydown か keyup か keypress を使うのが通常です。 keydown, keyup は Ctrl とか Shift など文字を出力しないキーでも発生しますが、keypress は文字を出力するキーのときのみ発生します。 やりたいことが不明なので、どれが適切かは判断できません。
kannmuri

2019/10/17 18:27

>一文字入力するたびにメッセージを表示するということは、ご希望のこととは違いますよね。 いやー、まさにそれがしたかったです。質問用の簡単な例としてアラートにしただけで、実際は「スペースが入力された場合に、スペース入力以外何もしたくない」ということだったんです。すいません表現が難しかったです。夜分にありがとうでした。 とりあえず何か特殊なこと(キーコードを取得するとか)をもくろんでなければ、コメントボックスの入力時のイベント起こすならinputを使っておくのがセオリーって感じですよね?
guest

0

ベストアンサー

jQuery が独自にイベントオブジェクトを拡張していて、その中に入力値をもつプロパティがありました。キーイベントと違い、キーコードを取得できるわけではないので、全角/半角対応等は自分でするしかありません。

js

1$( document ).on( 'input', 'textarea', function( e ) { 2 if ( e.originalEvent.data==' ' ) { 3 console.log('スペースなので実行しません'); 4 return; 5 } 6 console.log('yes'); 7} ); 8```**動くサンプル:**[https://jsfiddle.net/92qaLwbs/](https://jsfiddle.net/92qaLwbs/) 9 10--- 11 12【Event Object | jQuery API Documentation】 13[https://api.jquery.com/category/events/event-object/](https://api.jquery.com/category/events/event-object/)

投稿2019/10/17 18:13

kei344

総合スコア69596

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

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

kannmuri

2019/10/17 18:21

おお~!どうもありがとうございます????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問