0

ここ StackOverflow で他のソリューションをいくつか見てきましたが、なぜこれが突然機能しないのかについて特に興味があります。ちょっとした背景...私たちはまだjQuery 1.7.1を使用しており、新しいバージョンのjQueryで動作しないプラグインとページにパッチを当てようとしています。現時点では、1.8.3 でテストしています。問題は次のとおりです。

TemplateField にボタンがある UpdatePanel にグリッドがあります。各ボタンにはクラスが割り当てられており、クリックすると... モーダルがポップアップします。これは、.live イベントを document.ready に配置した 1.7.1 で完全に機能しました。1.8.3 にアップグレードして、live() と use on() をすべて document.ready で取り除きました。

グリッドでページングするたびに、非同期ポストバックが発生し、.on() が失われます。私が行った唯一の変更は、1.8.3 へのアップグレードです。live() を on() に変更します。これは以前は機能していました。なぜ突然これができなくなったのか。以下のコード例:

$(document).ready(function () {
            $("#AppDialog").dialog({
                bgiframe: true,
                autoOpen: false,
                height: 400,
                width: 650,
                modal: true,
                resizable: false }
            });

            $(".AppEdit").on("click", function (e) {
                e.preventDefault();
                $("#AppDialog").dialog('open');
            });
});

ボタンは、UpdatePanel にあるグリッドの TemplateField 内にあります。

<asp:Button ID="btnEdit" runat="server" Text="Edit" CommandName="EditApp" CssClass="AppEdit" />

これはなぜでしょうか?pageLoad を使用したくないので、ここでの最良のオプションは何ですか?

4

1 に答える 1

2

.live() と .on() の違いは、.live() はすべての要素 (今後 ajax で追加される要素を含む) に適用されるのに対し、.on() は現在 DOM にある要素にのみ適用されることです。

$(document).on('click', '.AppEdit', function() {});

これは、ドキュメント オブジェクトにイベント ハンドラーを設定し、イベントが発生してキャッチされるたびに、eventObject.target に AppEdit のクラスがあるかどうかを確認し、そうであれば関数を実行します。

于 2013-03-08T16:09:57.893 に答える