2010-05-25 87 views
1

我有下面的代码来实现一个带复选框的下拉列表。我的问题是,每次我点击一个复选框的下拉列表关闭,我需要重新打开它来选择更多的复选框。我如何做到这一点,所以下拉列表dosn't关闭,直到我点击它?如何防止ajax工具包DropDownExtender在点击时关闭?

<asp:Panel ID="pnl_Items" runat="server" BorderColor="Aqua" BorderWidth="1"> 
     <asp:CheckBoxList ID="cbl_Items" runat="server"> 
      <asp:ListItem Text="Item 1" /> 
      <asp:ListItem Text="Item 2" /> 
      <asp:ListItem Text="Item 3" />   
     </asp:CheckBoxList> 
    </asp:Panel> 

    <br /> 
    <asp:TextBox ID="tb_Items" runat="server"></asp:TextBox> 
    <ajax:DropDownExtender ID="TextBox1_DropDownExtender" 
          runat="server" 
          DynamicServicePath="" 
          Enabled="True" 
          DropDownControlID="pnl_Items" on 
          TargetControlID="tb_Items"> 
    </ajax:DropDownExtender> 

回答

2

我能够通过添加下面的JavaScript,我就this post发现,以获得所需的行为。

var DDE; 
function pageLoad() 
{ 
    DDE = $find('<%= TextBox1_DropDownExtender.ClientID %>'); 
    DDE._dropWrapperHoverBehavior_onhover(); 
    $get('<%= pnl_Items.ClientID %>').style.width = $get('<%= tb_Items.ClientID %>').clientWidth; 


    if (DDE._dropDownControl) { 
     $common.removeHandlers(DDE._dropDownControl, DDE._dropDownControl$delegates); 
    } 
    DDE._dropDownControl$delegates = { 
     click: Function.createDelegate(DDE, ShowMe), 
     contextmenu: Function.createDelegate(DDE, DDE._dropDownControl_oncontextmenu) 
    } 
    $addHandlers(DDE._dropDownControl, DDE._dropDownControl$delegates); 
} 

function ShowMe() { 
    DDE._wasClicked = true; 
} 
1

您将需要获取Ajax控件工具包的源代码并修改DropDownExtender的行为,使其符合您的需要。每个控件都有自己的文件夹,其中包含所有与其功能相关的文件。

重新编译,将新的dll放到您的项目中。

+0

我会看看那个。感谢领先。 – 2010-05-26 04:13:12

3

我不想改变AjaxControlToolkit。如下:

$(document).ready(function() { 
$('input[type=checkbox], label').click(function(e){ 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation)e.stopPropagation(); 
}); 
}); 

将jquery选择器更改为您的复选框!

+0

这比上面的方法要干净得多。通过认真构建jquery选择器,您可以实现所需的控件。谢谢。 – ravinsp 2010-06-29 08:43:51