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

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

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

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

Chrome extension

Chrome拡張機能

Q&A

0回答

721閲覧

Webページに追加したテキストフォーム内で、ショートカットキーが有効になってしまう

matonrin

総合スコア12

JavaScript

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

Chrome extension

Chrome拡張機能

0グッド

0クリップ

投稿2020/10/15 09:27

YouTubeの動画ページに追加したテキストフォームに、tagifyというライブラリを適用してタグ入力フォームを作成すると、そのフォーム内でショートカットキーが有効になってしまいます。

例えば、「fuga」と入力すると「f」キーの機能が呼び出されて、動画が全画面表示になります。

tagifyの機能を維持しつつ、テキストフォーム内でのショートカットキーを無効にする方法を教えて下さい。

試したこと

※以下で前提とするコード

HTML

1<div id="target-wrap"> 2 <input id="target"></input> 3</div>

JavaScript

1const input = document.querySelector('#target'); 2// settingsは省略。 3let tagify = new Tagify(input);
キー入力イベントの伝播を止める。

stopPropagationメソッドを使って、タグ入力フォームより上の要素にキー入力イベントが伝播するのを止めてみました。

JavaScript

1$('#target > tags > span').on('keydown', e => { 2 e.stopPropagation(); 3});

しかしそうすると、tagifyが表示するselectboxが表示されなくなってしまいました。

selectboxの追加先を変更する。

tagifyが表示するselectboxの追加先はdropdown.appendTargetの値で示され、デフォルトではdocument.bodyになっています。

これを変更し、タグ入力フォームの近くに追加して、先述のstopPropagationでキー入力イベントを囲い込もうとしました。

JavaScript

1const input = document.querySelector('#target'); 2let tagify = new Tagify(input, { 3 dropdown: { 4 appendTarget: document.querySelector('#target-wrap') 5 } 6}); 7 8$("#target-wrap").on('keydown', e => { 9 e.stopPropagation(); 10});

しかしそうすると、またselectboxが表示されなくなってしまいました。

現状

現在は妥協策として、selectboxの操作に使うキー入力の伝播のみを許可する、という実装にしています。

JavaScript

1$('#target > tags > span').on('keydown', e => { 2 const allowedKeys = ['Enter', 'ArrowUp', 'ArrowDown']; 3 if ( allowedKeys.includes(e.key) ) return true; 4 e.stopPropagation(); 5});

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問