問題タブ [event-bubbling]
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について混乱しています
私はjQueryの絶対的な初心者であり、フロントエンド開発ではかなりがらくたなので、ここに私の質問があります。
次のHTMLで
そして次のjQuery
アラートが2回表示され、1回のクリックで毎回正しい選択テキストが表示されます。stopImmediatePropagationのコメントを解除することで修正されます。
だから私の質問は、これがイベントのバブリング/キャプチャである場合、選択にはテキストがなく、オプションのみであるため、アラートの1つが空白になることはありません。
それとも、私はこのすべての作品がうまくいくと思う方法で間違った方向に進んでいますか?
御時間ありがとうございます。
javascript - イベントハンドラーのパフォーマンスは子要素の数に依存しますか?
行数が動的に増加するテーブルに 1 つの mousedown イベント ハンドラーがあり (現在は 1000 を超えており、パースペクティブでは無制限である必要があります)、プリロードされた行の数が増えるとパフォーマンスが低下します。イベント ハンドラーの目的は単純です。クリックされた行を特定し、それを強調表示します。
スローダウンの原因が正確にはわかりません。また、それがイベント ハンドラーであるかどうかもわかりません。マウスダウンバブルをトリガーできる子要素の数が、単一の親要素に関連付けられたイベントハンドラーのパフォーマンスに影響を与える可能性があるのだろうか?
更新:ここで簡単な例を思いつきました: http://client.infinity-8.me/table.php?num=1000 (num に任意の数を渡すことができます)、基本的に num 行のテーブルをレンダリングし、親テーブルにアタッチされた単一のイベント ハンドラーがあります。このことから、子要素の数によって引き起こされるパフォーマンスの顕著な低下は実際にはないと結論付ける必要があります。
wpf - WPF: 1 つの特定のコンテンツからのみバブリング イベントを処理する
今度は RoutedEvents について学習しようとしています。バブリングとトンネリングとすべてを理解しています。しかし、私は少し問題があり、どのように処理すればよいかわかりません。
自分で定義した UserControl に ItemsControl があります ( TabItem を継承します)。この itemsControl は、ListBox またはまだ決定されていないセレクターである可能性があります (このソリューションで何が最適かによって異なります)。
ここで、1 つの項目が選択されたときに (最適な選択方法が何であるかはまだわかりませんが、おそらく doubleclick )、UserControl を保持する TabControl でイベントをキャプチャする必要があります。ありがたいことに、userControl が XAML ビジュアルツリーに配置されると、バブリング イベントが流れ、イベントが TabControl に到達できるようになります。ただし、これを実装するにはまだいくつかの問題があります。
1) MouseDoubleClick として設定したとしましょう (他のタブや ItemsControlItems の外側など)。イベントがどこから来ているかをいつでも確認して、それが正しいことを確認できると思いますが、それが正しい方法だとは思えず、問題が発生している可能性があります。
2) イベントを SelectionChanged に設定し、ItemsControl を ListBox に設定した場合、ListBox 自体がそれを処理しないようにして、tabControl に到達できるようにする必要があります。どうすればいいですか?
3) 2) と同じですが、TabControl はそれ自体がセレクタであるため、独自の selectionchange イベントが発生します。それはどのように機能しますか。ハンドラーはリストボックスと TabControl の両方から取得しますか?
4) どの ItemsControl を使用すればよいかわかりません。アイテムをダブルクリックしてからイベントを処理するためだけに使用している場合、ListBox は多すぎません。選択などの望ましくない多くの効果があります。独自の ItemsControl を定義するか、ListBox を使用して選択などのプロパティの一部を上書きする方がよいでしょうか (どうすればよいでしょうか?)。
5) イベントのソースは ItemsContainer ですが、アイテム自体は必要ありません。そこにアクセスする簡単な方法はありませんか?
6) ボタンを配置し、DataTemplate にボタンを介してオブジェクトの ID を添付し、ボタンのクリックが処理される場所でそれをキャプチャして、それがどのアイテムであったかを識別したいとしましょう。それを行うプロパティはありますか、それとも自分で定義する必要がありますか?
7) 自分のイベントを作成するのが最善の方法でしょうか?
この問題に対するあなたの見解と、ここで行うのに最適なプロセスについてのコメントは高く評価されています。
編集:尋ねられたように、もう少し情報を追加することにしました。
私が目指しているもの; プログラムを起動すると、1 つのタブを含む TabControl があります。このタブは、オブジェクトのリスト (CompanyModel) を保持するため、残りのタブとは異なります。このリストは、私が言及した ItemsControl です。このリストから 1 つの会社を押すと、その会社に関する情報を含む新しいタブが追加されます。
私の解決策は、TabControl のソースとして TabItem コレクションを作成することでした。次に、別の XAML ソース ファイルで 2 種類の TabItems を定義します (何と呼べばよいかわかりません。基本的に新しいユーザー コントロールを追加します)。1 つは最初にリストが表示される場所で、もう 1 つは CompanyModel をコンストラクター パラメーターとして受け取り、それに関する情報を表示します。
これは機能しますが、会社リストのタブアイテムを個別に定義するという考えは好きではありません。タブコントロールの下で定義することはできません。両方ではなく、定義されたアイテムまたはソースのみを持つことができるからです。
選択した会社の Id を TabControl までバブリングする List DataTemplate にボタンを配置し、そこで処理し、CompanyModel を使用して新しい TabItem を追加することで、このアイデアを試しました。それはそれを試すための単なる解決策であり、CompanyTabs に anpther ボタンを追加すると、TabControl でもそれらを取得するなどの問題があります。
したがって、元のlistTabからイベントをバブルする良い方法を見つけるか、TabControlと同じ場所にタブを定義できる場合、私の問題は解決できます。
別の解決策として、TabControl とは別のリストを作成する方法があることはわかっていますが、他の人はこれがどのように表示されるかを知りたいと考えています。
jquery - JQuery とイベント バブリング...もう一度
私は大まかに次のことを行っています。
「#someElement」をクリックすると、予想どおり「my_function()」が起動しますが、アラート ボックスが 5 回表示されます!!!.
迅速かつ明白な解決策は、my_function() の内容を配置し、それらを '#someElement' に接続された if 制御ステートメントに配置することですが、私は概説した構造を維持することに非常に熱心であり、単純なそうする方法。
何か案は?
アップデート
私は当初、「クリック」イベント内からの関数呼び出しに問題があると想定していました。そうではありませんでした。問題は、ネストされた「ajaxComplete」呼び出しと関係があると思います。
case ステートメントが前の例の 'if' ステートメントを役に立たなくするので、定数 'k' を省略しました。上記のコードは、私が遭遇した問題をよりよく表しています。
どんな助けでも大歓迎です。:)
javascript - 奇妙なバブリングの問題
これが泡立っている理由はわかりませんが、そうです。誰かに何かアイデアがあるかどうか疑問に思っていますか?
したがって、ファイルをアップロードすると、コンソールに次のように表示されます。
2回連続で行う場合:
そして3回:
等
live()
イベントがバブリングしていれば" go
" もバブリングすると思いましたが、そうではありません。event.stropPropagation
送信内のほぼすべての場所で試してみて、そのように.die()
接続しました。$('#file_upload').die().live(...
何か案は?
PS このlive()
呼び出しは、jQuery doc ロード ( $(function(){...});
)のすぐ内側にあります。
wpf - GridView / ListView(WPF)内のTextBoxにテキストを入力できません
ビューモデルにバインドされたListView内にTextBoxとDropDownがあります。comboBoxが正常に機能している間、TextBox内にテキストを「入力」することはできません。Backspace / SpaceBar / Ctrl + C / Ctrl + Vは正常に機能していますが、英数字キーを押すとすぐに、TextBoxにテキストが表示されません。
空のKeyUp/KeyDown/TextChangeイベントハンドラーを使用してチェックしました。すべてのタイプのキーを押すとKeyUp/KeyDownイベントが発生しますが、英数字キーを押してもTextChangeはトリガーされません。
誰かがこれまでにこの問題に直面したことがあるかどうかを提案してください。または、デバッグして実際の問題を見つける方法がある場合。
これは私のXAMLです-コードビハインドには何もありません。
ご関心をお寄せいただきありがとうございます。
注:1)WinFormアプリケーションからこのWPFウィンドウを読み込んでいます。
2)問題は、textBoxとviewModelのバインドにはありません。Textプロパティにハードコードされている単純なテキストを編集することさえできません(上記のコードのように)
3)親コントロールに「any」イベントハンドラーを登録していません。
解決策: @HCLによって提案されたリンクに従って、次のコードで問題が修正されました。
jquery - jQuery - LI をクリックし、UL を表示/非表示にする - LI:a href をクリックし、引き続き UL を表示し、空白のウィンドウで開く
ここ SO のすばらしい貢献者に感謝します! jQuery を理解し始めると、jQuery の方がはるかにクールです。:)
したがって、クリックすると子ULを表示/非表示にするLIがあります。私がやりたいことは、空白のウィンドウを開く LI 内のリンクをクリックする機能を持つことですが、子 UL を閉じることもありません。ブランクウィンドウのオープンが完了しました
ただし、LI で "return: false" を返す方法がわからないため、空白のウィンドウが開いたときに UL を閉じません。ユーザーが空白のウィンドウを閉じたときに、ユーザーが使用していた子 UL を表示できるようにしたいと考えています。
これが明確でない場合は、お知らせください。
ありがとう!
javascript - イベントバブリングキャンセルの使い方
イベントのバブリングの発生を停止する方法に関するコードをどこでも探しましたが、QuirksmodeのWebサイトから次のコードを見つけました。
でも、どこでどのように使うのかわかりません。'e'パラメータは何として使用されますか(または'e'として渡される必要があります)?この関数はイベントハンドラーコードで呼び出されますか?...等?
助けが必要です。誰かが私にヒントを教えてもらえますか?
基本的に、次のように、「updateAvailableAttributes()」と呼ばれる「onchange」ハンドラーを持つ4つの要素があります。
updateAvailableAttributes()スクリプトは次のとおりです。
私の質問は、「doSomething(e)」を「updateAvailableAttributes()」に組み込むにはどうすればよいですか?すでに「onchange」イベントハンドラーにありますか?
前もって感謝します。
javascript - iframeを囲むdivをクリックしてキャプチャする
iframeを囲むdivでクリックイベントまたはマウスダウンイベントをキャプチャするにはどうすればよいですか。divのクリックイベントに関数をアタッチしようとしましたが、iframeがイベントを周囲のdivにバブルすることはないため、関数が呼び出されることはありません。divでイベントをキャプチャし、それをデフォルトのアクションのためにiframeに伝播する方法はありますか?