1

ページ内のコンテンツを置き換えるために使用しているUpdatePanelがあります。UpdatePanelの外に、on()いくつかのボタンクリックを割り当てる関数を使用するjQueryがあります。私の理解では、新しいjQuery.on()構文は、イベントハンドラーと古いlive()機能の両方を置き換えることを目的としています。この関数は、ページへの変更を監視し、ページに追加された要素にイベントを添付することになっていますが、これは私のテストページlive()の関数では発生しません。on()UpdatePanelを変更した後でコンソールを開いて同じ関数を実行すると、イベントハンドラーは正しく機能します。

これが私がJavaScriptに関して持っているものです:

$(function () {
    $('.results').on('click', function () {
        $(this).children('.explination').slideToggle();
    });
});

UpdatePanelは、MultiViewを含む単純なUpdatePanelです。

Microsoft AjaxPageRequestManagerを使用してこれを処理できることは承知していますが、イベントが想定どおりにバインドされている場合は不要のようです。今はそれを使用しますが、間違って実行しているのか、jQueryとASP.Netが連携していないのか興味があります。

私が持っている理論の1つは、何らかの理由で、UpdatePanelは、jQueryが変更をキャプチャしてonイベントを再度起動するために使用しているDOM更新トリガーを起動しないというものです。

4

2 に答える 2

6

秘訣は、委任されたイベントを使用することです。jQueryドキュメントからの引用:

委任されたイベントには、後でドキュメントに追加される子孫要素からのイベントを処理できるという利点があります。委任されたイベントハンドラーがアタッチされたときに存在することが保証されている要素を選択することにより、委任されたイベントを使用して、イベントハンドラーを頻繁にアタッチおよび削除する必要をなくすことができます。

委任されたイベントを使用するには、次のように、セレクターを2番目のパラメーターとして渡します。

$('html').on('click', '.results', function () {
    $(this).children('.explination').slideToggle();
});
于 2012-06-18T12:29:57.383 に答える
1

私は更新パネルが嫌いです...ええと。多分このようなことを試してみてください:

DOM:

<asp:UpdatePanel runat="server"><ContentTemplate>
  <MultiView>...</MultiView>
  <script>
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_endRequest(function() {
        ready();
    });
    </script>
 </ContentTemplate></asp:UpdatePanel>

Jquery-ness:

 $(document).ready(function(){
        ready();
    });

    function ready(){
      $('.results').on('click', function () {
         $(this).children('.explination').slideToggle();
      });
    }
于 2012-06-18T12:30:08.087 に答える