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

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

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

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

jQuery

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

3542閲覧

フォーカス時表示されるボックス内のボタンを押したい

k499778

総合スコア599

JavaScript

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

jQuery

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2016/05/24 11:16

編集2016/05/24 13:56

現在上記タグの技術を使って、アプリ開発を行っています。

仕様は以下です。

・テキストボックスがあり、
そこにフォーカスが当たると、
非表示にしていたボックスが表示される。
・そのボックス内には、ボタンやリンクといった押下する項目がある。
・テキストボックスからフォーカスが外れるとボックスを非表示にする

javascriptのfocus,focusoutを使って実装しました。
が、以下の点に詰まりました。

表示されたボックス内のボタンやリンクを押下するとfocusoutイベントが発火し、ボックスが非表示になってしまうのです。

これを非表示にしない方法はないでしょうか?

ボックス外をクリックした際は、ボックスを非表示にしたいのですが、
ボックス内をクリックした際はボックスを表示したままにしたいのです。

focusoutには別にこだわっていないので、何かいい方法や別のやり方を知っていらっしゃる方がいれば教えていただきたいです。


追記

画面イメージ

イメージ説明

コードは以下です。

html

1<!DOCTYPE HTML> 2<html> 3<head> 4 <meta charset="UTF-8"/> 5 <meta http-equiv="content-language" content="ja"/> 6 <title>TEST</title> 7 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 8 <style> 9 #box{ 10 position: relative; 11 background: aqua; 12 top:20px; 13 width: 300px; 14 border: solid blue; 15 } 16 </style> 17</head> 18<body> 19<input type="text" id="textbox"> 20<div id="box" style="display:none"> 21 <a href="a.shtml">リンク</a><br> 22 <button type="button">ボタン</button> 23</div> 24<script> 25$(function(){ 26 27 // ボックスを表示する 28 $('#textbox').on('focus',function(){ 29 $('#box').show(); 30 }); 31 32 // ボックスを非表示にする 33 $('#textbox').on('focusout',function(){ 34 $('#box').hide(); 35 }); 36}); 37</script> 38</body> 39</html> 40

追記2

タイムマージンを使った方法

htnl

1<!DOCTYPE HTML> 2<html> 3<head> 4 <meta charset="UTF-8"/> 5 <meta http-equiv="content-language" content="ja"/> 6 <title>TEST</title> 7 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 8 <style> 9 #box{ 10 position: relative; 11 background: aqua; 12 top:20px; 13 width: 300px; 14 border: solid blue; 15 } 16 </style> 17</head> 18<body> 19<input type="text" id="textbox"> 20<div id="box" style="display:none"> 21 <a href="">リンク</a><br> 22 <button type="button">ボタン</button> 23</div> 24 25<script> 26$(function(){ 27 28 // ボックスを表示する 29 $('#textbox').on('focus',function(){ 30 $('#box').show(); 31 }); 32 33 // ボックスを非表示にする 34 var timerId 35 $('#textbox').on('focusout',function(){ 36 timerId = setTimeout(function(){ 37 $('#box').hide(); 38 },1000); 39 }); 40 41 // ボックス内をクリックした際ボックスを非表示にしない 42 $('#box').on('click',function(){ 43 clearTimeout(timerId); 44 }); 45}); 46</script> 47 48</body> 49</html>

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

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

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

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

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

kei344

2016/05/24 12:22

ご自身で書かれたコードを質問文に追記いただいたほうが回答を得られやすいと思います。
k499778

2016/05/24 13:06

追記します。
guest

回答1

0

ベストアンサー

フォーカスが外れるとボックスが消える機能は本当に必要なのか

「フォーカスが外れるとボックスが消える」ように実装しているのですから、別のテキストボックスにフォーカスが移ればボックスが消えるのは当然ですよね。
「フォーカスが外れるとボックスを消える機能」は本当に必要なのでしょうか。
必要だとしたら「なぜ」それが必要だと考えているのでしょうか。

UIの問題に対しては「実装したい機能」だけを伝えても息詰まることがあります。
今回のように「実装しようとしている機能」と「実際の結果」に矛盾があるのであれば設計を見直す必要があります。
その機能を実装する目的をよく意識して、その目的を私たちに伝えるようにしてみて下さい。
そうすれば、良い代替案が提案されるかもしれません。

対処療法

フォーカスが外れてからボックスが消えるまでにタイムマージンをとり、そのマージン内に目的のボックスにフォーカスが移った場合に限り、ボックスを消す動作をキャンセルすれば一応は解決できます。
ただし、これはスマートではない上に、ユーザが直観的にわかるUI設計ではないと思います。

Re: k499778 さん

投稿2016/05/24 12:31

編集2016/05/24 12:39
think49

総合スコア18162

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

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

k499778

2016/05/24 13:22

回答有り難うございます。 もう少し詳しく言うと、 ツイッターの検索機能のようなものを作りたいのです。 https://twitter.com/?lang=ja リンク先の画面の ボックス内に検索キーワードを入力すると、それに関するワードがダイアログに表示されます。 ツイッターは入力した際に表示して、文字が空になった際に非表示にしています。 しかし、自分が作るものはボックスにカーソルが当たった時に、また違った項目を表示し、 入力すると関連ワードを表示するといったものになっています。 タイムマージンの発想はなかったので、参考になりました。ありがとうございます。 明日少し仕様に関して相談してみます。
k499778

2016/05/24 13:53

自分なりのタイムマージンの方法を追記致しました。 このような方法でいいでしょうか? また一度ボックス内をクリックすると、ボックスを非表示にすることができなくなってしまいます。 もしその点に関してアドバイスいただければ幸いです。
think49

2016/05/24 13:54

> ボックス内に検索キーワードを入力すると、それに関するワードがダイアログに表示されます。 その要件でしたら検索ボックスからフォーカスを外した場合に関連キーワードを消す必要はないように思われます。 テキストボックスを input イベントで監視してリアルタイムに関連キーワードを表示する実装にしてみてはいかがでしょうか。
k499778

2016/05/24 14:15

返答ありがとうございます。 >その要件でしたら検索ボックスからフォーカスを外した場合に関連キーワードを消す必要はないように思われます。 ただそのボックスが表示されている下にもコンテンツや押下するものがあったりするので、ボックスが表示されているときはそのコンテンツが見えなくなるので、 やはり検索キーワードを使っていない時は、ボックスを非表示にする必要があるように思います。
think49

2016/05/24 14:30

ボックスの下のコンテンツは下にスクロールすれば読めると思うのですが、コンテンツを括るボックスの高さが絶対指定で overflow: hidden; なのでしょうか。 それであれば、関連キーワードを表示している時だけ外側のボックスの高さを拡張すれば解決できそうですが…。
k499778

2016/05/24 15:44

返答ありがとうございます。 ボックスが表示されているのもコンテンツ部分もページの上部のためスクロールして、 重なっている下のコンテンツを見ることができないのです( ;∀;) 少し明日上司の方に相談してみるなりしてみます。 ただなかなか若輩者の私ではちょっとのことでは仕様の変更をしてもらえないので 万が一のときのためにタイムマージンのやり方もマスターしておきたいと思っています。 別スレを立ててますので、もしお時間ございましたらアドバイス頂けると幸いです。 https://teratail.com/questions/35924?complete= よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問