2011-03-07 50 views
0

如果我在普通页面内使用它(例如Default.aspx),此代码正常工作。我想在UserControl中使用它。创建UserControls

我该怎么做?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Check/Uncheck All CheckBoxes Using JQuery</title> 

    <script src="Scripts/jquery-1.2.6.js" type="text/javascript"></script> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#chkAll').click(
      function() { 
       $("INPUT[type='checkbox']").attr('checked', $('#chkAll').is(':checked')); 
      }); 
     });  

    </script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:CheckBox ID="chkAll" runat="server" Text="Check All" /><br /> 

     <asp:CheckBoxList ID="cbList" runat="server"> 
     </asp:CheckBoxList> 

    </div> 
    </form> 
</body> 
</html> 

回答

0

复选框放置在用户控制,由用户控制的ID预先考虑时具有不同的客户端ID。尝试修改您的jQuery如下:

$(document).ready(function() { 
    $('#<%=chkAll.ClientID %>').click(
    function() { 
     $("INPUT[type='checkbox']").attr('checked', $('#<%=chkAll.ClientID %>').is(':checked')); 
    }); 
}); 
0

有创建支持脚本的用户控件有很多的复杂性,例如ASP.NET - JQuery

通常:您需要使脚本命名容器安全。 DOM ID引用需要对ASP.NET客户端ID(@ FarligOpptredn的答案)进行,或者,也可以使用CSS选择器(除非您创建的功能特定于某个实例)。

理想情况下,在JS文件中创建所有客户端脚本,并使用ScriptManager在代码隐藏中注册它。这允许脚本重新使用并避免UserControl实例之间的冲突。由于您不能在JS文件中使用scriptlets(<%= ... %>),请改用参数来引用UserControl DOM中的对象,或使用CSS选择器。在事件中使用this而不是硬件参考。例如

myUserControl.js:

$(document).ready(function() { 
      $('.myUserControl > .chkAll').click(
      function() { 
       $("INPUT[type='checkbox']").attr('checked', $(this).is(':checked')); 
      }); 
     }); 

myUserControl.ascx:

<div class="myUserControl"> 

    <asp:CheckBox ID="chkAll" class="chkAll" runat="server" Text="Check All" /><br /> 

    <asp:CheckBoxList ID="cbList" runat="server"> 
    </asp:CheckBoxList> 

</div> 

这将会使你的脚本更容易阅读和调试,也与有很多逃避的内联脚本。