2010-09-07 41 views
0

在其他的事情,我有我的内容页面这个网站的内容:jQuery的问题与锚点击()方法

<asp:Content ID="Content2" ContentPlaceHolderID="HeadContent" runat="server"> 
<script type="text/javascript"> 
    $("[ID$=panelDetail]").dialog({ 
     autoOpen: false 
     , resizable: false 
     , height: 'auto' 
     , width: 'auto' 
     , modal: true 
     , overlay: { opacity: 0.8, background: "black" } 
    }); 

    function loadDialog(action) { 
     $("[ID$=panelDetail]").dialog('open'); 
     $.ajax({ 
      type: "POST", 
      dataType: "HTML", 
      url: action, 
      data: {}, 
      success: function(response) { 
       $("#panelDetail").html(''); 
       $("#panelDetail").html(response); 
      } 
     }); 
    } 

    $("[ID$=btnAdd]").click(function() { 
     alert("click on add"); 
     loadDialog("/Foro/Create", ""); 
    }); 
</script> 
</asp:Content> 

我有那么两个分开的部分

<asp:Content ID="Content1" ContentPlaceHolderID="BodyContent" runat="server"> 
    <div id="panelDetail" style="display:none" title="Panel Title"></div> 
</asp:Content> 

<asp:Content ID="Content4" ContentPlaceHolderID="RightPanel" runat="server"> 
    <a href="#" id="btnAdd">Add new</a> 
    <a href="#" id="btnEdit">Edit</a> 
</asp:Content> 

为什么这个HTML片段标记内部的警报永远不会被调用?

感谢您的帮助!

回答

2

您需要在document.ready调用来包装你的电话,像这样:

$(function() { 
    $("a[ID$=btnAdd]").click(function() { 
    alert("click on add"); 
    loadDialog("/Foro/Create", ""); 
    }); 
}); 

否则元素不存在被尚未发现:) document.ready处理火的时候,DOM的满载,例如你的链接在那里被发现。

在UpatePanels的情况下,切换到.live(),像这样:

$(function() { 
    $("a[ID$=btnAdd]").live('click', function() { 
    alert("click on add"); 
    loadDialog("/Foro/Create", ""); 
    }); 
}); 
+0

你说得对。我现在觉得很蠢。谢谢!好奇心:“$(function(){})”是“$(document).ready(function(){})”的缩写吗? – Lorenzo 2010-09-07 13:50:07

+0

@Lorenzo - 活着学习,只要你没有活过它*学习它之后你就​​会做得很好:) – 2010-09-07 13:53:16

+0

@Lorenzo - 是的,这是正确的,它们是可以互换的,我只是在它上面输入很多次一天,所以我个人更喜欢短版。 – 2010-09-07 13:53:50