代码之家  ›  专栏  ›  技术社区  ›  dsteele

强制ASP.NET DropDownList展开

  •  3
  • dsteele  · 技术社区  · 14 年前

    我有一个ASP.NET数据绑定DropDownList,它是根据文本框的内容填充的。填充后,我想自动展开DropDownList,这样用户就意识到需要做出选择,而不需要单击下拉列表来展开它。似乎没有属性或方法执行此操作。

    编辑:在试用了EdB的例子之后,我还是被卡住了。我的DDL的ID是'ctl00_contentplaceholder9_ddlcontact'。如果我在一个按钮的onclick事件中输入以下内容,它会正常工作,下拉列表会很好地展开:

        document.getElementById('ctl00_ContentPlaceHolder9_ddlContact').size=10;
    

    但是,DDL数据绑定事件中的以下代码显示警报,但不展开下拉列表:

    string script = "<SCRIPT LANGUAGE='JavaScript'> ";
        script += "alert('expanding');document.getElementById('ctl00_ContentPlaceHolder9_ddlContact').size=10 </SCRIPT>";
        ClientScript.RegisterClientScriptBlock(GetType(), "Dropdown", script);
    
    3 回复  |  直到 13 年前
        1
  •  2
  •   Community Nick Dandoulakis    7 年前

    总结: 不能展开普通下拉列表。有关详细信息,请参阅此讨论: Can I open a dropdownlist using jQuery . 但是,也有一些可以接受的解决方法。

    一种方法(尽管有点厚颜无耻)是扩展下拉列表以同时显示更多项目。默认情况下,a 元素一次只显示一个列表项,但可以使用它 大小 一次显示多个属性。通过这种方法,您可以调整 大小 属性,当用户将鼠标悬停在DDL上(以模拟展开DDL),然后恢复为 大小 当鼠标关闭时(将其返回到“正常”DDL)。下面是一个例子:

    <asp:DropDownList runat="server" ID="ddlColors" 
                      onmouseover="this.size=3;" 
                      onmouseout="this.size=1">
        <asp:ListItem>Red</asp:ListItem>
        <asp:ListItem>Green</asp:ListItem>
        <asp:ListItem>Blue</asp:ListItem>
    </asp:DropDownList>
    

    另一个选项是使用javascript创建一个伪选择。简而言之,您使用脚本和DOM操作以及CSS的组合来获得满足您需求的用户界面。

    编程愉快!

        2
  •  0
  •   Ed B    14 年前

    更改DropDownList后,可以更改其大小。选择某个选项后,可以将大小改回1。

    这段代码改变了mouseover的大小,但是在服务器端绑定之后,您将其更改为调用open-ddl。

    <script language="javascript">    
    function open_ddl()
        {
        document.getElementById("select1").size=5
        }
    
        function close_ddl()
        {
        document.getElementBById("select1").size=1
        }
    
        </script>
    
        Worst President Ever:
        <select id="Select2" runat="SERVER" onmouseover="open_ddl()" onmouseout="close_ddl()">
                         <option value="0" >Obama</option>
                         <option value="1" >Carter</option>
                         <option value="2" >Nixon</option>
                         <option value="3" >Clinton</option>
        </select>
    
        3
  •  0
  •   Oleks    13 年前

    您需要将属性multiple添加到选择列表中。

    所以,这是您需要附加到脚本变量上的javascript代码吗? DataBound . (前提是您使用的是jquery)

    script+=$("#ctl00_ContentPlaceHolder9_ddlContact").attr("multiple", "multiple");
    

    或者,您可以去掉JavaScript,直接在标记中添加多个属性。这样做:

    DropDownList1.Attributes.Add("multiple","multiple");