問題タブ [focusin]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jquery - jquery focusin() とバブリングの防止
更新 2:
私はそれで寝てから、いくつかのサンプルコードを作成して、問題をさらに解明しようとしました.
次の例では、firebug の console.log を使用して、どのオブジェクトが focusin イベントをトリガーしているかを示しています。
1) 最初のリンクをクリックします: 黄色の div が表示されます 2) タブ キーを押します: 黄色の div 内のリンクに移動します
それはそれを行いますが、その後 focusin イベントをトリガーし、何らかの理由で、黄色の div を閉じるように指示された赤い div に再びバブルアップするように見えます。
これは、黄色の div に focusin イベントを伝播しないように指示した後でもあります。
次に、内側の div にフォーカスした後にのみ、親 div に focusin イベントをアタッチしようとしました。
そこで何が起こるかというと、内側の div の最初のリンクにタブで移動すると、親の div に focusin イベントが設定されます。これはいい!しかし、その後、innerdiv 内の次のリンクにタブで移動すると、focusin イベントが再度発生し、div が閉じられます。
だから、私はまだ困惑していると思います。フォーカスインの泡立ちを止めることはできないようです。考え?理論?
以下、元記事...
============================
onclick イベントを介して div を表示しています。divの外をクリックしたら非表示にしたい。そのために、ボディに 1 回限りのクリック イベントをバインドします。
div 自体の中で、実際に div 内をクリックしても body のクリックがトリガーされないように、イベントを伝播しないように指示します。
これは意図したとおりにうまく機能します。
divからタブを外すと、divも非表示にしたいと思います。
私の考えでは、そのシナリオでは、ボディに focusin イベントを使用できます。
繰り返しますが、イベントが div 自体から飛び出してほしくないので、これを追加しました:
これは動作しません。myDiv 内の要素内でフォーカスを変更すると、body で focusin イベントがトリガーされます。
これはおそらくjQueryのバグですか?もしそうなら、これを達成するためのより良い方法はありますか?
アップデート:
問題は、DIV がフォーカスを持つことができないため、DIV がフォーカスを失ったかどうかを判断する方法がないように思われることです。私の解決策のロジックは、何か ELSE が div の外側にあるフォーカスを持っているかどうかを確認することでした (したがって、focusin を使用しています) が、div 内の focusin イベントの問題が発生しているように見えます。
今のところ、私の解決策は、ポップアップに CLOSE 要素を追加し、それを明示的にトリガーする必要があると思います。ただし、特にキーボード ナビゲーションには理想的ではありません。
javascript - jquery: div をクリックすると、テキスト ボックスにフォーカスが移ります
Jquery 1.4 より前は、これがフォーカスをテキスト ボックスに呼び出す方法でしたが、現在は機能しません。ボタンをクリックすると、テキストボックスにフォーカスを呼び出したいのですが、「フォーカス」とは、テキストボックスがクリックされたように動作するようにして、ユーザーがテキストボックスをクリックする必要がないようにすることです.
.focus
したいテキストボックスを自動クリックすることになっていますが、なぜ今は機能していないのですか? Jquery 1.4で壊れました。私はそれを行う方法を知る必要があります。
focus - Backbone.js の focus イベントは、focus と focusin の 2 つのイベントを発生させます
Backbone.js を使用したコードのビュー部分は次のようになります。
入力要素がフォーカスされるたびに、関数が 2 回呼び出されます。を使用してスタックトレースを印刷してみましたconsole.trace()
。関数呼び出しがfocusイベントから発生し、次回はfocusinから発生したことを示しています。
これらのイベントのいずれかが発生するのを防ぐ方法を見つけようとする私の試みは、私をどこにも導きません。どうすればこれを修正できますか?
javascript - 「focusin」サポートを検出する方法は?
Perfection killsのおかげで、次の JavaScript を使用してイベント サポートを検出できます。
これは、私がそれを必要とするほぼ唯一の時間に機能しmouseenter
ます。サポートの検出。hasEvent('mouseenter')
Chrome や Firefox などでは false を返します。
focusin
しかし、現在、イベントとイベントをサポートしていないブラウザーを「修正」しようとしていfocusout
ます。PPK によると、それは基本的に単なる Firefox です。残念ながら、次の理由により、Chrome と Safari は「不完全な」サポートとしてリストされています。
Safari と Chrome は、これらのイベントを addEventListener でのみ発生させます。従来の登録ではありません。
一般的には、それで問題ありません。とにかく使うだけaddEventListener
です。ただし、経由でのサポートの検出は機能しないことを意味しelem.onfocusin !== undefined
ます。私はそれをテストしました、そしてそれは本当です:
No...
Chrome で上記のアラートが表示されます。focusin
ブラウザ スニッフィングを使用せずに、ブラウザが をサポートしているかどうかを検出する方法はありますか?
javascript - 「フォーカスイン」と「フォーカスアウト」でevent.bubblesがfalseになるのはなぜですか?
数分前、私は次の質問に答えました:
jQuery での focusin/focusout と focus/blur の違いは何ですか?
答えは次のとおりです。
短い答え:focusin
泡、focus
しません。
focusout
泡立ちblur
ません。
私はそれをテストしました、それは本当ですが、デモをセットアップしようとしているときに奇妙なことに遭遇しました:
focusin
そしてfocusout
私にくれe.bubbles == false
それはjQueryのバグですか、それともここで明らかなことを見逃していますか?
jquery - フォーカス時に 2 つの「focusin」イベントを受け取る
私がしていること
コードの一部では、focusin
イベントのリスナーがあり、別の部分では、プログラムでinput
. Chrome、Safari、Firefox ではイベント リスナーが 1 回呼び出されますが、IE (IE10 を含む) では 2 回呼び出されます。jQuery でリスナーを登録し、jQuery.on()
でフォーカスを設定します.focus()
。この動作を示す例の完全なソースについては、以下を参照してください。必要に応じて、その例を実行できます。
質問
- jQueryを使用していない場合でも、IEが
focusin
2回起動しています。また、フォーカスがプログラムによって設定された場合にのみ行われ、ユーザーがフィールドをタブまたはクリックした場合には行われません。なんで?それは単なる IE のバグですか、それとも IE がこのように振る舞う正当な理由があるのでしょうか? - IE のバグであろうとなかろうと、ここで jQuery は IE と他のブラウザーとの違いを解決すべきではないでしょうか? つまり、jQuery のバグではありませんか?
- これをどのように回避しますか?(つまり、フォーカスがプログラムによって設定されているか、ユーザーによって設定されているかに関係なく、フォーカスごとに 1 回だけ実行されるコードを作成できます。)
完全なソース
contenteditable - コンテンツが空の場合、contenteditable でキャレットが消える
div[contenteditable] を empty(like $(this).html("")) にすると、キャレットが消えました。
バグですか?また、他の解決策を見つけました。setTimeout 関数を使用します。しかし、それは私にとって完璧な解決策ではありません。多くの contenteditables 部門を使用すると、タブキーでフォーカスを移動します。その場合、そのソリューションは正しく機能していません。
Ubuntu 12.04でテストしたところ、
Firefox 20.0 のクリック イベント: キャレットが消え、
Chrome 25.0 で Focusin イベント: キャレットが消えました。
あなたはそれを私のフィドルでテストすることができます 黄色の領域、または他の領域をクリックしてください。
javascript - フォーカスアウトから Id を除外する方法
Jquery では、「focusout」が設定されている場合、フォーカスされた領域外の任意の場所をクリックすると、focusout が呼び出されます。
「フォーカスアウト」機能のアクティブ化から一部の ID を除外するにはどうすればよいですか。?
例えばここ。
フォーカスのある div を非表示にし、フォーカスが外れているときにその div を表示する入力テキスト フィールド ( id="A") があるため、これ以外の場所をクリックすると明らかに div が表示されます ("#A ") 入力フィールド。
問題は、「フォーカスアウト」機能を起動しないように、ID(おそらく選択フィールド(Id="B" の隣))をどのように設定するかです。それが理にかなっていることを願っています。