イベントリスナーがイベントの通知を受け取らないようにして、別のイベントリスナーが処理を進めることを確認する前に。JavaScriptイベントの呼び出しを傍受する(常に呼び出されるようにイベントリスナーを追加する)
最初の考えでは、イベントリスナーをバインドして、その要素の他のすべてのイベントリスナーをトリガーするかどうかを、チェーン内の最初のイベントリスナーとして判断することでした。これを調べてみると、少なくとも、イベントリスナーが要素にバインドされている方法の組み合わせでは不可能ではないようです。
私は、Webページ上の項目のリストを持っている:
は、いくつかのコンテキストを提供します。ユーザーがこれらの「アイテムリンク」の1つをクリックすると、ページの別の領域にフォームが入力され、ユーザーはアイテムのプロパティの一部を変更できます。変更されたアイテムのプロパティを永続化するには、フォームに関連する「更新」ボタンをクリックする必要があります。
私の目的は、ユーザーが「更新」をクリックせずにアイテムのプロパティを変更した後、別の「アイテムリンク」をクリックすると、直前に行った変更を無視してよいことを確認することです。
マイ未遂ソリューション:
- バインドの変更イベントリスナーをtrueにするJavaScript「hasChanges」フィールドを設定し、すべてのフォーム要素へ。
- クラスをすべての「アイテムリンク」に追加します。このクラスによって、ユーザーが変更を緩める原因となるリンクとして識別されます。
- jQueryを使用して、このクラスを持つすべての要素にclickおよびkeypressイベントリスナーをバインドし、 'hasChanges'がtrueの場合は確認ポップアップを表示します。
- 変更を保存する場合は、[キャンセル]をクリックして、イベントの伝播を停止します。これで
問題は、「アイテムリンク」要素がすでにユーザーが項目のプロパティを変更することを可能にするページのセクションを更新する(Java)のSpring AJAX decorationクリックイベントリスナーを持っており、これは常に前に呼び出されていることです確認を表示するイベントリスナー現実的には、ページのアイテムプロパティフォームセクションが更新される前に確認が表示されるように、AJAXデコレーションの前に進むことを確認するイベントリスナーをバインドすることはできません。
誰にも提案はありますか?
ありがとうございます。
更新:
提案された解決策をtrueに 'caputre' フラグを設定することでした。だから今「アイテムリンク」にイベントリスナーを追加します私のコードは次のようになります。
$("." + linkClassName).each(function()
{
if ($.browser.msie)
{
this.setCapture(true);
this.attachEvent("onclick", _self.linksFunction);
}
else
{
this.addEventListener("click", _self.linksFunction, true);
}
});
しかし、ログインを追加した「アイテムリンク」のクリック時に呼び出されるすべての機能に(FFのコンソールに)、私の関数 'linksFunction'はまだ最後に呼び出されます。私は何か間違ったことをした?
ありがとうございました。
一般的には良いアイデアですが、jQueryではフェーズを指定できません。実際にはIEはバブルフェーズのみをサポートしています。 –
IEでうまくいかない提案は通常役に立ちません。免責事項を追加する必要があります –
ああ、はい - IEとFFをサポートする必要があります。とにかくありがとう。 –