0

1 つのユーザー コントロール (user.ascx と呼びます) と 2 つのボタンを含む 1 つの updatepanel を持つ 1 つのページがあります。

私の user.ascx には、他のコントロールを無効/有効にできるチェックボックスがいくつかあります。私はuser.ascxに追加されたjavascriptでそれをやっていますが、updatepanelが更新するとき(これらの2つのボタンのうちの1つをクリックした後の非同期ポストバック)、チェックボックス(クリックまたは変更)のjavascriptイベントは発生しません。関数 pageLoad(sender,args) で $().ready() をラップするだけで完璧に機能しますが、そのページによるとhttp://blog.dreamlabsolutions.com/post/2009/03/25/jQuery- live-and-ASPNET-Ajax-asynchronous-postback.aspx live() 関数を使用することをお勧めします。

残念ながら、.click()、.change()、.bind()、.live()、.on() などのイベントをバインドするすべての利用可能な方法は、ポストバック後に機能し、非同期ポストバック後には機能しません。

動作しないコードのサンプル:

<script type="text/javascript">
         $().ready(function () {
    var ddlAge= $("#<%= ddlAge.ClientID %>");
    var cboxFirst= $("#<%= cboxFirst.ClientID %>");
    var cboxSecond= $("#<%= cboxSecond.ClientID %>");


          $(document).on("change", cboxFirst, function () {
                if (cboxFirst.is(":checked")) {
                    ddlAge.attr("disabled", "disabled");
                    ddlAge.val("");
                }
                else { ddlAge.removeAttr("disabled");  }
            });

          cboxSecond.live('change',function () {
                if (cboxSecond.is(":checked")) {
                    ddlAge.attr("disabled", "disabled");
                    ddlAge.val("");
                }
                else { ddlAge.removeAttr("disabled");  }
            });

});
</script>

両方のチェックボックスは、ポストバック後にのみ機能します。私は何を間違っている可能性がありますか? 誰もそのような問題を抱えていますか?Jquery 1.7.1 を使用していますが、js エラーは発生しません。

どんな助けにも感謝します。

4

1 に答える 1

1

まったく機能していることに驚いてい.onます。ドキュメントhttp://api.jquery.com/on/によると、2 番目のパラメーターはセレクター文字列であり、jquery オブジェクトではありません。

私はこのようなことを試してみます:

$(document).on("change", "#<%= cboxFirst.ClientID %>", function () {
    if ($(this).is(":checked")) {
         ddlAge.attr("disabled", "disabled");
         ddlAge.val("");
    }
    else { ddlAge.removeAttr("disabled");  }
});

ClientID が同じままである限り、UpdatePanel がすべてのコンテンツを置き換えても、イベントは引き続き機能します。

また、.live好意的に非推奨になっている、または.on

于 2012-08-20T17:19:29.703 に答える