問題タブ [event-propagation]
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.
qt - カスタムQEventをQt/PyQtの親ウィジェットに伝播します
拳、質問の長さについてお詫びします。
シグナルをリンクする代わりに、イベントタイプに基づいてアクションをトリガーするために、カスタムQtイベントを子ウィジェットから最上位の親ウィジェットに伝播しようとしています。
postEvent()
Qt docsは、持っているメソッドaccept()
とignore()
メソッドで投稿されたすべてのイベントを伝播できることを示唆しています(各QEvent
サブクラスを意味します)。
customEvents
代わりにメソッドをオーバーライドしようとしましevents
たが、役に立ちませんでした。
Python
PyQt4(Qtバージョンは4.6)を使用してPythonでこれを試しました。
この例では、次のように最初の引数としてBar.someEventHandler()
イベントが投稿された場合にのみトリガーされます。self.parent()
イベントは受信オブジェクトに直接渡されるため、これは理解できます。
C ++
C ++での同様の例:
foobar.h
foobar.cpp
main.cpp
Pythonの場合と同じように、これはイベントがオブジェクトに直接渡される場合にのみ機能します。
おそらく私は要点を見逃しましたが、キーイベントとマウスイベントのみが上方に伝播される可能性はありますか?
.net - コレクションベースのプロジェクトでのイベントの伝播
私は.NET 4でコレクションベースのプロジェクトを持っています。つまり、マスターコレクションがあり、それを「システム」と呼びます。これは、フレームで構成され、それぞれがカードで構成され、順番に作成されますチャンネルのアップ。つまり、System->Frame->Card->Channel のようになります。これらはすべてオブジェクトとして表現され、それらの間には親子関係があります。基本的に、Channel は Card にのみ公開され、Card は Frame にのみ公開され、Frame は System にのみ公開されます。
理想的には、System クラスのメソッドのみを外部に公開したいと考えています。ただし、Channel、Card、および Frame クラスで発生する重要なイベントがあります。現在、私がそれらを処理する方法は、伝播によるものです。チャネルでイベントが発生したとします。このイベントは、最初に Card で発生し、次に Frame で発生し、最後に System で発生します。これにより、大量のコードが生成されることがわかります。しかし、私の主な関心事はコードではなく、パフォーマンスです。
この伝播は私のパフォーマンスに悪影響を与えると思いますか? より効率的にする方法はありますか?他にどのようなオプションがありますか? 私のコレクションは比較的小さいです。System is 1, Frames < 16, Cards < 256, Channels < 8192. ほとんどのデータは Channel クラスに保存され、その中にプリミティブ オブジェクトしかありません。
編集
チャネルによって発生するイベントのカードにあるコードは次のとおりです。
Card クラス内の Card に Channel を追加するときは、次のように呼び出します。
jquery - $ .get()を使用すると、jQueryがクリックイベントのバブリングを停止します
クリックイベントをボタンに割り当てました。ボタンは、別のHTMLスニペットを取得し、.html(string)メソッドを使用してDIV要素に挿入します。
Content.htmlページは次のとおりです。
'#btnClose'ボタンをクリックするたびに、HTMLスニッパーのコンテンツが表示されますが、alert('Test')も発生します。stopPropagation()、preventDefault()を試しましたが、falseを返しました。喜びはありませんでした。誰かが私が間違っていることに光を当てることができますか?
javascript - jQueryのアンダーレイ要素イベントを中断せずに、マウスイベントに対する要素反応を無効にするにはどうすればよいですか?
<div>
ユーザーがマウスポインタをドラッグしているときにマウスの座標を表示するように設計されたシンプルなポップアップを作成しようとしています。このポップアップは、マウスポインタの右下に表示されます。下敷き div
には、独自の非常に重要なマウスイベントハンドラーがあります(例).mousemove()
。ポップアップdiv
はマウスポインタからかなり離れています(下に約16ピクセル、右に約16ピクセル)。たとえば、ユーザーがオブジェクトのサイズを変更していて、そのポップアップにそのオブジェクトの新しいサイズが表示されているとします。ユーザーがオブジェクトのサイズをゆっくり変更している場合、これは問題ありません。しかし、ユーザーが突然オブジェクトのサイズを変更し、ポップアップをポイントするとすぐに、div
下になりますdiv
フォーカスを失い、サイズ変更を担当するイベントハンドラーは、オーバーレイ-sとまったくdiv
連携するように設計されていないため、「壊れた」(マウスポインターが基になるものを「忘れる」ようなものです) 。div
ポップアップdiv
マウスイベントを抑制して、下にあるdiv
イベントを厳密に継続的に実行できるようにする機能はありますか?
私はそのようなことを試みました:
それは私が必要とするようには機能しません。誰かが同じ問題を抱えていましたか?それを回避することは可能ですか?おそらく、そのための完全なjQueryプラグインがあります...混乱しています...
前もって感謝します。
jquery - jQuery: クリック キューを防止する
アニメーションが完了するまで、基本的に登録しないようにクリックする必要があります。使用してみましreturn false
たが、リンクが完全に無効になっているようです。
も使用してみ$(".image_scroll").stop().animate({"left": "+=300px"}, "slow");
ましたが、アニメーションが途切れてグリッチに見えます。
編集:ID#right
はa
タグではなく画像にあります。HTML は次のとおりです。
javascript - Javascript:stopPropagationを有効にする方法は?
object.stopPropagation()
イベントのバブリングを停止できますが、どうすれば再度有効にできますか?
jsには次のような定義済みの関数がありobject.startPropagation
ますか?
編集:
問題は、JSが「オブジェクト」をクリックした場合、イベントバブリングを停止したくない場合でも常に停止することを覚えているため、停止したいということです。
javascript - GWT:同じdivの2つのDOMイベント、優先度、および最初のイベントが呼び出されたときに2番目のイベントを非アクティブ化する方法は?
Dom mouseDown ハンドラーが 2 つあるウィジェットがあります。
まず、私は GWT でコーディングしていますが、問題はおそらく Javascript に関連していると思います。
このハンドラー登録の 1 つは、ウィジェットのサイズ変更を可能にする Resizable という名前のクラスで定義されています。2 番目のハンドラー登録は、ウィジェットをドラッグ可能にする Draggable という名前のクラスで定義されます。
したがって、これら 2 つのクラスの各コンストラクター (引数にウィジェットを指定) には、次のものがあります。
Resizable ハンドラーが最初に呼び出され、Draggable ハンドラーの後にのみ呼び出されるように、dom イベントに優先順位を付けたいと考えています。どうすれば達成できますか?
また、サイズ変更可能なハンドラーが呼び出された場合は、イベントを停止したいと考えています。機能を試してみましたevent.stopPropagation()
が、イベントは親に対してのみ停止でき、同じウィジェットの同様のイベントに対しては停止できないようです。
ウィジェットのサイズが変更可能な場合にドラッグ可能なハンドラーが呼び出されないように、このイベントを停止するにはどうすればよいですか?
私のウィジェットはサイズ変更可能であるがドラッグ可能ではない、ドラッグ可能でサイズ変更可能ではない、またはその両方であるため、これら2つのクラスは完全に独立していると正確に言えます。したがって、可能であれば、これら 2 つのクラス間のコードの交差を避けたいと考えています。
ありがとう
internet-explorer - jQuery ホットキー: IE が Alt+H などの独自のショートカットを実行できないようにします
jQuery ホットキーを使用して、 Alt+ H、Alt+などのショートカットCをサイト内の特定のアクションにバインドしようとしています。IE 以外のすべてのブラウザで、イベントの伝播が (当然のことながら) 停止します。まず、これを達成することは可能ですか?もしそうなら、どのように?
コードサンプルは次のとおりです。
IE では、行$this.toggleMenu( 'H' );
は実行されcancelbubble
ますが、効果がないように見えます (ブラウザが「ヘルプ」メニューを開きます)。
javascript - イベントの伝播とajaxの投稿
私は次のコードを持っています:
div内のHTMLは外部ソースからのものであり、その構造がわからないため、制御できません。
このリンクがクリックされたら、いくつかのデータを投稿する必要があります。そこで、div要素にonclickイベントハンドラーを追加し、イベントが伝播することを期待して、jQueryajax関数を使用してデータを投稿しました。
これはSafariを除くすべてのブラウザで正常に機能しました。エラーは返されず、コールバック関数が呼び出されますが、何らかの理由でサーバーに到達しません。リクエストを受け取るたびにデータベースに書き込みます。ブラウザに投稿URLを手動でロードしようとしました-正常に動作し、dbにレコードが作成されます。FFとChromeも試してみました-期待どおりに動作します。
アラートをコールバック関数に入れると呼び出されますが、Safariではdata=nullです。
この状況でAJAXが機能することを期待するのは正しいですか?そして、この問題に対するより良い解決策はありますか?
ありがとうございました!
jquery - FireFoxでのイベント伝播の問題
イベントの伝播を防ぐために、次のコードを使用しています。
ChromeとSafariでは動作しますが、OperaやFirefoxでは動作しません(まだIEを試していません!)。FFfirebugは「e」が未定義であると言います。私はjqueryの第一人者であることにほど遠いので、eが未定義である理由がわかりませんが、本当ですか?var eがそれを定義していると思いましたか?
そして、どうすればそれを修正できますか?
愚かな質問に対するお詫び-私は独学で、行くにつれて物事を拾い上げます。
MTIA