2

私のaspxファイルには、次のものがあります。

<asp:UpdatePanel ID="UpdatePanel3" UpdateMode="Always" runat="server">
    <ContentTemplate>
       <asp:Button ID="Button1" runat="server" Text="Button" />
    </ContentTemplate>
</asp:UpdatePanel>

私のJavaScriptファイルには次のものがあります。

$('#ctl00_ContentPlaceHolder1_Button1').click(function (e) {
        alert('hello');
    });

しかし、ボタンを初めてクリックしたときだけ、私はを受け取りalert('hello')、その後はアラートメッセージは表示されません。

4

3 に答える 3

2

動的コンテンツの場合は、jQueryの.live()メソッドを使用します。

$('#ctl00_ContentPlaceHolder1_Button1').live('click', function (e) {
    alert('hello');
});

また、IDの代わりにクラスを使用することをお勧めします。IDの使用は、ASP.NETコンテナー/制御構造に影響を与えるコード変更に対して脆弱です。

<asp:Button ID="Button1" runat="server" Text="Button" class="performsMyClickAction" />

$('.performsMyClickAction').live('click', function (e) { ... }
于 2010-08-06T15:16:29.733 に答える
0

なぜセレクターが#ct_100_ContenPlaceHolder1_Button1であるのか疑問に思います。#Button1に切り替えたところ、問題なく動作しているように見えました。

于 2010-08-06T15:05:49.973 に答える
0

UpdatePanel非同期コールバックを実行すると、パネルの内容が完全に置き換えられるため、jqueryイベントの登録が失われます。

コールバック中にスクリプトマネージャーにスクリプト登録を追加することで、より多くのJavaScriptを実行して再配線することができます。このようなものはあなたを近づけるはずです(あなたのボタンのサーバー側クリックハンドラーで):

ScriptManager.RegisterStartupScript(
    this,
    GetType(),
    "AnyStringYouWant",
    "$('#ctl00_ContentPlaceHolder1_Button1').click(function (e) {alert('hello');});",
    true);
于 2010-08-06T15:06:26.480 に答える