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

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

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

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

Q&A

解決済

3回答

56925閲覧

Enterキーだけが押されたときにイベントを発火させる方法

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

1グッド

1クリップ

投稿2016/10/04 06:25

編集2016/10/04 06:35

Shift+Enterなどではイベントは発火せずに、Enterのみが押されたときにのみイベントが発生するようにしたいと思っています。

現状以下のようなものを作ってみたのですが、Shift+Enterを押しても「console.log('2')」が実行されてしまい、もちろんEnterのみを押しても「console.log('2')」が実行されてしまう状況です。
また、これはShift+Enterのみを避けようとしたものですが、できれば◯◯+Enter全てを避けてEnterのみのときにイベントが発火するようにしたいです。

わかる方、教えてください。

HTML

1<div id='body-text' class='body-text' contenteditable=true data-placeholder='Body Contents'></div>
var bodyContets = document.getElementById('body-text') bodyContets.addEventListener('keypress', onKeyPress) function onKeyPress(e) { if(e.keyCode == '16') {//e.shiftKeyでもダメでした if (e.keyCode == '13') { console.log('1') } else { } } else if(e.keyCode == '13') { console.log('2') } }
DrqYuto👍を押しています

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

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

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

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

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

kunai

2016/10/04 06:27

うまく行かないというのはどういう状況でしょうか。Enter単体で押された時にも動作しない?Shift+Enterで押された時にも発動する?など
退会済みユーザー

退会済みユーザー

2016/10/04 06:37

詳細のご説明ができていなく申し訳ありません。 今質問内容をより詳細に変更いたしました。 ここでも簡単にお伝えするとShift+Enterを押してもEnterのみを押してもEnterのみのときに実行されるべき内容が実行されてしまいます。
guest

回答3

0

ベストアンサー

Enterキー以外と、
Enterキー+(Shift/Ctrl/Altキー)を防ぐのであれば、以下のコードで可能かと思われます。

javascript

1function onKeyPress(e) { 2 if ( e.keyCode !== 13 || ( e.keyCode === 13 && (e.shiftKey === true || e.ctrlKey === true || e.altKey === true) )) { // Enterキー除外 3 return false; 4 } 5 // ここに処理をかく 6} 7

= 追記しました =

Enterキー+Shiftキーで処理を通ってしまったのは、
その時の e.keyCodeは 13(Enterキーのコード)だったから です。

keypress(keydownも同様)は、いずれかのキーを押したときに
**「Shift,Ctrl,Altキーがそれぞれ押されているか」**という値を戻り値(e)に持っているため、
**「e.keyCodeが13でも、shift/ctrl/altが同時に押されていない」**という条件を下記のように追加しました。

javascript

1( e.keyCode === 13 && (e.shiftKey === true || e.ctrlKey === true || e.altKey === true) )

説明が苦手なので、伝わるかわかりませんが・・・
このような感じです。
console.log で e を見てみながら、イベントを起こしてみると分かりやすいかもです。

投稿2016/10/04 06:55

編集2016/10/04 08:22
CyberMergina

総合スコア295

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

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

退会済みユーザー

退会済みユーザー

2016/10/04 08:07

ありがとうございます!! やりたかったことができました。 ちなみになんですが、私が質問の中であげたコードはどの部分がいけなかったのかぱっとわかったりしますか? もしすぐにわかれば、勉強のために教えていただけると嬉しいのですが。
CyberMergina

2016/10/04 08:23 編集

追記してみました。解決したようで幸いです。
guest

0

同時に入力されるキーは keydown してから keyup した瞬間に確定するのでキー一覧を保持しておけば実現できます。
汎用的に書ける関数を書いてみました。

HTML

1<script src="addholdkeyeventlistener.js"></script> 2<script> 3addHoldKeyEventListener(document, function (event) { 4 var keyCodes = event.keyCodes; 5 6 if (keyCodes.length === 1 & keyCodes[0] === 13) { 7 console.log(keyCodes[0]); 8 } 9}, false); 10 11addHoldKeyEventListener(document, {i: 0, handleEvent: function (event) { 12 var keyCodes = event.keyCodes; 13 14 if (keyCodes.length === 1 & keyCodes[0] === 13) { 15 console.log(++this.i, keyCodes[0]); 16 } 17}}, false); 18</script>

Re: Hiro14 さん

投稿2016/10/04 08:09

think49

総合スコア18162

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

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

think49

2016/10/04 08:13

同時に入力されるキーは `keydown` してから `keyup` した瞬間に確定するのでキー一覧を保持しておけば実現できます。 汎用的に書ける関数を書いてみました。 - [addholdkeyeventlistener.js: 同時に入力されたキー一覧を取得するイベントリスナ(addEventListener 互換)](https://gist.github.com/think49/e53091b12791eabad03625fd08b52680) ```HTML <script src="addholdkeyeventlistener.js"></script> <script> addHoldKeyEventListener(document, function (event) { var keyCodes = event.keyCodes; if (keyCodes.length === 1 & keyCodes[0] === 13) { console.log(keyCodes[0]); } }, false); addHoldKeyEventListener(document, {i: 0, handleEvent: function (event) { var keyCodes = event.keyCodes; if (keyCodes.length === 1 & keyCodes[0] === 13) { console.log(++this.i, keyCodes[0]); } }}, false); </script> ``` Re: Hiro14 さん
guest

0

keydown と keyup を使うんだったらこんなのでも行ける気がします。

javascript

1var mytest = {}; 2 3mytest.keys = []; 4mytest.shift = 16; 5mytest.enter = 13; 6 7mytest.onkeydown = function(e){ 8 if(e.keyCode == mytest.shift){ 9 mytest.keys[mytest.shift] = e.keyCode; 10 } 11 if(e.keyCode == mytest.enter) { 12 if(mytest.keys[mytest.shift]) { 13 console.log('shift + enter'); 14 } else { 15 console.log('enter only'); 16 } 17 } 18}; 19 20mytest.onkeyup = function(e){ mytest.keys = []; }; 21 22var bodyContets = document.getElementById('body-text'); 23 bodyContets.addEventListener('keydown', mytest.onkeydown); 24 bodyContets.addEventListener('keyup', mytest.onkeyup);

投稿2016/10/04 07:01

tkturbo

総合スコア5572

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

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

退会済みユーザー

退会済みユーザー

2016/10/04 08:09

ご丁寧にコードを書いて教えていただきありがとうございました。 こちらでもしっかり実装できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問