Влияние JQuery на динамически создаваемые элементы управления на панели обновления ASP.NET AJAX - PullRequest
1 голос
/ 15 апреля 2011

Здравствуйте, StakOverflowians! Интересно, может ли кто-нибудь помочь с этим.

У меня есть динамически созданный тег на панели обновления AJAX. После нажатия на метку я пытаюсь (на данный момент) отобразить предупреждение с помощью JQuery. Проблема в том, что предупреждение не отображается, когда тег генерируется динамически, однако, если я объявляю тег статически в .aspx, то он работает. Вот код:

   protected void Button_Click(object sender, EventArgs e){
       HtmlAnchor htmlA = new HtmlAnchor();
       htmlA.ID = "hidden_link";
       PlaceHolder1.Controls.Add(htmlA);

       string javaScriptFunction =
          "jQuery(document).ready(function() {" +
              "$(function () {" +
                  "$(\"a[id$='hidden_link']\").click(function () {" +
                      "alert('Alert: Hello from jQuery!');" +
                  "});" +
              "});" +
          "}";

       ScriptManager.RegisterStartupScript(this, 
                                           this.GetType(), 
                                           "myScript", 
                                           javaScriptFunction, 
                                           true); 
   }

и на .aspx, у меня есть:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
    </ContentTemplate>
</asp:UpdatePanel>

<script language="javascript" type="text/javascript">
    function pageLoad() {
        jQuery(document).ready(function() {
        $("a[id$='hidden_link']").click(function() {
                alert("Alert: Hello from jQuery!");
            });
        });
    } 
</script>

Что я должен сделать, чтобы оповещение работало для динамически создаваемых элементов управления внутри PlaceHolder1? Любая помощь будет оценена по достоинству.

Спасибо, Али

1 Ответ

1 голос
/ 15 апреля 2011

Если вы нажимаете кнопку в асинхронном сообщении, вы фактически не перезагружаете страницу. Таким образом, метод $(document).ready() не будет вызван.

Чтобы решить вашу проблему, просто удалите звонок.

string javaScriptFunction = "$(\"a[id$='hidden_link']\").click(function () { alert('Alert: Hello from jQuery!'); });";

Или же вы можете найти функцию jQuery live () , более подходящую для присоединения обработчиков к элементам, которые создаются динамически

...