如何在选定控件上使用 Jquery Multiselect 插件

Posted

技术标签:

【中文标题】如何在选定控件上使用 Jquery Multiselect 插件【英文标题】:How to use Jquery Multiselect plugin on selected controls 【发布时间】:2014-12-21 11:39:07 【问题描述】:

我创建了一个用户控件,它显示带有复选框的下拉菜单。一切正常,但是当我在我的 asp.net 页面上使用此控件时,它会影响其他下拉控件。

我不想影响我网页上的其他控件。

我尝试在用户控件上添加内联多选样式但没有成功,其他控件仍然有效。

用户控制

            <%@ Control Language="VB" AutoEventWireup="false" CodeFile="ucMultiSelect.ascx.vb" Inherits="ucMultiSelect" %>
        <!DOCTYPE html>

        <html lang="en">
        <head>
         <style type="text/css">
        .ui-multiselect  padding:2px 0 2px 4px; text-align:left 
        .ui-multiselect span.ui-icon  float:right 
        .ui-multiselect-single .ui-multiselect-checkboxes input  position:absolute !important; top: auto !important; left:-9999px; 
        .ui-multiselect-single .ui-multiselect-checkboxes label  padding:5px !important 

        .ui-multiselect-header  margin-bottom:3px; padding:3px 0 3px 4px 
        .ui-multiselect-header ul  font-size:0.9em 
        .ui-multiselect-header ul li  float:left; padding:0 10px 0 0 
        .ui-multiselect-header a  text-decoration:none 
        .ui-multiselect-header a:hover  text-decoration:underline 
        .ui-multiselect-header span.ui-icon  float:left 
        .ui-multiselect-header li.ui-multiselect-close  float:right; text-align:right; padding-right:0 

        .ui-multiselect-menu  display:none; padding:3px; position:absolute; z-index:10000; text-align: left 
        .ui-multiselect-checkboxes  position:relative /* fixes bug in IE6/7 */; overflow-y:auto 
        .ui-multiselect-checkboxes label  cursor:default; display:block; border:1px solid transparent; padding:3px 1px 
        .ui-multiselect-checkboxes label input  position:relative; top:1px 
        .ui-multiselect-checkboxes li  clear:both; font-size:0.9em; padding-right:3px 
        .ui-multiselect-checkboxes li.ui-multiselect-optgroup-label  text-align:center; font-weight:bold; border-bottom:1px solid 
        .ui-multiselect-checkboxes li.ui-multiselect-optgroup-label a  display:block; padding:3px; margin:1px 0; text-decoration:none 

        /* remove label borders in IE6 because IE6 does not support transparency */
        * html .ui-multiselect-checkboxes label  border:none 


        </style>


        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>jQuery MultiSelect Widget Demo</title>
        <%--<link rel="stylesheet" type="text/css" href="Styles/jquery.multiselect.css" />--%>
        <%--<link rel="stylesheet" type="text/css" href="assets/style.css" />--%>
        <%--<link rel="stylesheet" type="text/css" href="assets/prettify.css" />--%>
        <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/ui-lightness/jquery-ui.css" />

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>

        <script type="text/javascript" src="assets/prettify.js"></script>
        <script type="text/javascript" src="Scripts/jquery.multiselect.js"></script>





        <script type="text/javascript">
            $(function () 
                $("select").multiselect();
            );
        </script>
        </head>
        <body id="test">

            <asp:ListBox ID="ListBox1" SelectionMode="Multiple" runat="server">
                <asp:ListItem Text="A" Value="1"></asp:ListItem> 
                <asp:ListItem Text="B" Value="2"></asp:ListItem>
            </asp:ListBox>


            </body>
        </html>

asp.net 页面

        <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

    <%@ Register src="ucMultiSelect.ascx" tagname="selectionCtrl" tagprefix="uc1" %>

    <!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></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:DropDownList ID="DropDownList1" runat="server">
            <asp:ListItem Text="A" Value="1"></asp:ListItem> 
            <asp:ListItem Text="B" Value="2"></asp:ListItem>
        </asp:DropDownList>

        <div>
            <uc1:selectionCtrl ID="selectionCtrl1" runat="server" />
        </div>
        </form>
    </body>
    </html>

【问题讨论】:

我认为您提供的信息不足以让我们为您提供帮助? - 您的自定义控件是如何构建的?您看到其他下拉菜单有哪些具体的“变化”?你有可以用来说明的 jsFiddle 示例吗? 第一个下拉控件应该看起来像一个普通的 asp.net 控件,而不是我的用户控件。 【参考方案1】:

您的用户控件不干净应该只包含所需标记的部分,因为您将用户控件放在aspx page 的正文部分中,它不应该包含html, head, body 标记。

如下所示更改 UserControl 请注意,我在绑定多选 $("#testUserControl select").multiselect(); 时使用了选择器 div id = testUserControl 这将仅限于 div#testUserControl 部分,您可以在任何地方应用类似的逻辑想。

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ucMultiSelect.ascx.vb" Inherits="ucMultiSelect" %>
<!--Below jquery api resources you can include in Master or Main page -->
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/ui-lightness/jquery-ui.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="assets/prettify.js"></script>
<script type="text/javascript" src="Scripts/jquery.multiselect.js"></script>
<div id="testUserControl">
    <asp:ListBox ID="ListBox1" SelectionMode="Multiple" runat="server">
        <asp:ListItem Text="A" Value="1"></asp:ListItem>
        <asp:ListItem Text="B" Value="2"></asp:ListItem>
    </asp:ListBox>
</div>
<script type="text/javascript">
    $(function() 
        $("#testUserControl select").multiselect(
            noneSelectedText: "Select Options" //here you can set "noneSelectedText" that you want
        );
    );
</script>

【讨论】:

如何从 asp.net 页面设置 noneSelectedText? 我用noneSelectedText 选项更新了答案。如果你想从 aspx 页面设置它,那么将脚本块移动到 aspx 页面。 我尝试将脚本块移动到 aspx 页面,但它不起作用。您能否提供一个示例。谢谢 确保没有选择任何列表项,当你取消选中所有时你能看到“选择选项” 我对 updatepanel 有一些问题,所以我将脚本移动到 Sys.WebForms.PageRequestManager.getInstance() 并且它工作正常。谢谢:)

以上是关于如何在选定控件上使用 Jquery Multiselect 插件的主要内容,如果未能解决你的问题,请参考以下文章

jQuery - 通过文本描述设置选择控件的选定值

即使焦点在另一个控件上,如何更改列表视图选定的行背景颜色?

在 Woocommerce 可变产品上获取 jQuery 中选定的变体价格

如何清除/重置 jQuery UI Datepicker 日历上的选定日期?

如何在同一页面上运行不同版本的 jQuery?

jQuery UI 选项卡 - 如何获取当前选定的选项卡索引