如何在从本地存储中的变量加载页面时设置基于 UL 的下拉列表的值

How do I set the value of a UL-based dropdown list on page load from a variable in localStorage?

本文关键字:设置 下拉列表 UL 变量 存储 加载      更新时间:2023-09-26

我正在使用我在这里找到的基于 UL 的漂亮下拉列表(如果重要的话,它特别是第三个模型)作为我的用户基于角色的选择框的基础。我不希望我的用户每次访问时都必须选择他们的角色,所以每当他们进行更改时,我都会将他们的选择存储到 localStorage 中。

我知道如何从存储中恢复变量,并且知道如何使用该变量为选择框设置值,但我不知道如何更新此基于 UL 的下拉列表。此外,我不知道如何更新当用户从列表中选择时应该触发的点击事件。

逻辑是:

  1. 检查是否存在特定的本地存储对象。如果没有,请不要执行任何操作,只需等待用户与下拉列表交互。
  2. 将下拉列表的值设置为 localStorage 对象的值。
  3. 激活脚本的点击功能,意思是:

    • 将下拉列表的当前显示文本设置为存储在 localStorage 中的内容。
    • 根据下拉列表中所选内容的值筛选附近的菜单。

    $(document).ready(function(){
        if (localStorage.getItem('role')) {
            //what do I do?;
        }
    });
    function DropDown(el) {
            this.dd = el;
            this.placeholder = this.dd.children('span');
            this.opts = this.dd.find('ul.dropdown > li');
            this.val = '';
            this.index = -1;
            this.initEvents();
        }
        DropDown.prototype = {
            initEvents : function() {
                var obj = this;
                obj.dd.on('click', function(event){
                    $(this).toggleClass('active');
                    return false;
                });
                obj.opts.on('click',function(){
                    var opt = $(this);
                    obj.val = opt.text();
                    obj.index = opt.index();
                    obj.placeholder.text(obj.val);
                    if (obj.val === 'Workflow Designer') {
                        obj.val = 'studio';
                    }
                    obj.val = obj.val.toLowerCase();
                    $('.agent, .supervisor, .manager, .studio').not( '.'+obj.val ).css('display','none');
                    $('.agent, .supervisor, .manager, .studio').filter( '.'+obj.val ).css('display','block');
                    localStorage.setItem('role', obj.val);
                });
            },
            getValue : function() {
                return this.val;
            },
            getIndex : function() {
                return this.index;
            }
        }
        $(function() {
            var dd = new DropDown( $('#dd') );
            $(document).click(function() {
                // all dropdowns
                $('.wrapper-dropdown-3').removeClass('active');
            });
        });
    </script>
    

相关的 HTML 将是:

<div class="wrapper-demo">
                <div id="dd" class="wrapper-dropdown-3" tabindex="1">
                    <span>I am a(n): </span>
                    <ul class="dropdown">
                        <li><a href="#"><i class="fa fa-user fa-fw"></i>Agent</a></li>
                        <li><a href="#"><i class="fa fa-user-plus fa-fw"></i>Supervisor</a></li>
                        <li><a href="#"><i class="fa fa-users fa-fw"></i>Manager</a></li>
                        <li><a href="#"><i class="fa fa-sitemap fa-fw"></i>Workflow Designer</a></li>
                    </ul>
                </div>
            ​</div>

吉斯菲德尔

暇暮你摆弄,看起来正在按你的预期工作:

https://jsfiddle.net/9nhsytwe/

var DropDown = function (el) {
    this.initEvents= function() {
    
      this.dd = el;
      this.placeholder = this.dd.children('span');
      this.opts = this.dd.find('ul.dropdown > li');
      this.val = '';
      this.index = -1;
      var that=this;
      
      
        var obj = this;
        this.dd.on('click', function(event) {
            $(this).toggleClass('active');
            return false;
        });
        
        
        this.opts.on('click', function() {
            that.setVal($(this).text())
        });
    }
    
    this.setVal = function(val) {
            
            if (val === 'Workflow Designer') {
                val = 'studio';
            }
            console.log(val)
            val = val.toLowerCase();
            var currRole = '.' + val;
            $('.agent, .supervisor, .manager, .studio').not(currRole).css('display', 'none');
            $('.agent, .supervisor, .manager, .studio').filter(currRole).css('display', 'block');
            localStorage.setItem('role', currRole);
    }
    
    this.getValue= function() {
        return this.val;
    }
    this.getIndex= function() {
        return this.index;
    }
}
$(function() {
    var dd = new DropDown($('#dd'));
    dd.initEvents();
    $(document).click(function() {
        // all dropdowns
        $('.wrapper-dropdown-3').removeClass('active');
    });
    
    if (localStorage.getItem('role')) {
        //what do I do?;
        console.log(localStorage.getItem('role'))
        dd.setVal(localStorage.getItem('role').replace('.', ''))
    }
});
div.row.topNav .small-3:first-child {
    text-align: right;
}
div.row.topNav .small-6 {
    margin-top: 12px;
}
div.row.topNav .small-3:last-child {
    text-align: left;
    margin-top: 18px;
}
ul.navigation > li.has-children > a:hover,
ul.navigation a[href="#"]:hover {
    cursor: default;
}
ul.navigation a {
    color: #6e7583;
    font-weight: normal;
    padding: 0 15px !important;
    line-height: initial !important;
}
.navigation > li:hover > a {
    color: #fa8c00;
}
ul.navigation > li.has-children:after {
    display: none;
}
ul.navigation ul ul {
    top: -2px;
    left: 100%;
}
ul.navigation ul a {
    color: #687074;
    font-weight: normal;
}
ul.navigation ul {
    z-index: 9999 !important;
    border-top: solid 2px #fa8c00;
    border-bottom: solid 2px #687074;
    padding: 0;
}
ul.navigation ul,
ul.navigation ul ul,
ul.navigation ul ul ul,
ul.navigation ul ul ul ul {
    background-color: #fff;
}
ul.navigation ul li a:hover,
ul.navigation ul ul li a:hover,
ul.navigation ul ul ul li a:hover,
ul.navigation ul ul ul ul li a:hover {
    background-color: #eee;
}
ul.navigation ul li:hover {
    background-color: #fff !important;
}
ul.navigation ul li a:hover {
    color: #687074;
    font-weight: normal;
}
ul.navigation li li {
    padding: 0;
}
ul.navigation ul.sub-menu > li > a {
    padding: 8px 24px !important;
    margin: 0;
    text-align: left;
    line-height: 15px !important;
}
section.middle.tab-bar-section.row.outer-row {
    max-width: 80em !important;
    margin: 8px auto 20px auto !important;
}
ul.navigation > li.has-children > a:before {
    content: "'f107";
    position: absolute;
    right: 0px;
    color: #6e7583;
    padding: 0;
    margin: 0;
    font-size: 12px;
    font-family: FontAwesome;
}
ul.navigation > li.has-children {
    margin-right: 4px;
}
ul.navigation > li > ul {
    top: 50px;
    /* padding-top: 40px; */
}
ul.navigation > li a {
    line-height: 20px !important;
    padding-bottom: 20px !important;
}
ul.navigation p {
    margin: 0;
    padding: 0;
}
.navigation-wrapper {
    float: none;
    /* display: block; */
    text-align: center;
    /* padding: 0; */
    /* margin: 0; */
    /* height: auto; */
    /* width: auto; */
    /* vertical-align: top; */
    /* position: absolute; */
    /* top: 26px; */
    /* right: 0; */
    /* vertical-align: middle !important; */
}
ul.navigation {
    z-index: 1;
    display: inline-block;
    width: auto;
    margin: 0;
    padding: 0;
    position: static;
    top: 0;
    left: 0;
    /* line-height: inherit; */
    /* float: none; */
    vertical-align: top;
}
/* GLOBALS */
*,
*:after,
*:before {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    padding: 0;
    margin: 0;
}
::selection {
    background: transparent;
}
::-moz-selection {
    background: transparent;
}
.wrapper-demo {
    /* margin: 60px 0 0 0; */
    *zoom: 1;
    /* font-weight: 400; */
    /* float: right; */
}
.wrapper-demo:after {
    clear: both;
    content: "";
    display: table;
}
.wrapper-dropdown-3 {
    /* Size and position */
    position: relative;
    width: 200px;
    margin: 0 auto;
    padding: 10px;
    /* Styles */
    background: #fff;
    /* border-radius: 7px; */
    border: 1px solid rgba(0, 0, 0, 0.15);
    box-shadow: 0 1px 1px rgba(50, 50, 50, 0.1);
    cursor: pointer;
    outline: none;
    /* Font settings */
    font-weight: bold;
    color: #6e7583;
}
.wrapper-dropdown-3:after {
    content: "";
    width: 0;
    height: 0;
    position: absolute;
    right: 15px;
    top: 50%;
    margin-top: -3px;
    border-width: 6px 6px 0 6px;
    border-style: solid;
    border-color: #6e7583 transparent;
}
.wrapper-dropdown-3 .dropdown {
    /* Size & position */
    position: absolute;
    top: 140%;
    left: 0;
    right: 0;
    /* Styles */
    background: white;
    border-radius: inherit;
    border: 1px solid rgba(0, 0, 0, 0.17);
    box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
    font-weight: normal;
    -webkit-transition: all 0.5s ease-in;
    -moz-transition: all 0.5s ease-in;
    -ms-transition: all 0.5s ease-in;
    -o-transition: all 0.5s ease-in;
    transition: all 0.5s ease-in;
    list-style: none;
    /* Hiding */
    opacity: 0;
    pointer-events: none;
}
.wrapper-dropdown-3 .dropdown:after {
    content: "";
    width: 0;
    height: 0;
    position: absolute;
    bottom: 100%;
    right: 15px;
    border-width: 0 6px 6px 6px;
    border-style: solid;
    border-color: #fff transparent;
}
.wrapper-dropdown-3 .dropdown:before {
    content: "";
    width: 0;
    height: 0;
    position: absolute;
    bottom: 100%;
    right: 13px;
    border-width: 0 8px 8px 8px;
    border-style: solid;
    border-color: rgba(0, 0, 0, 0.1) transparent;
}
.wrapper-dropdown-3 .dropdown li a {
    display: block;
    padding: 10px;
    text-decoration: none;
    color: #6e7583;
    border-bottom: 1px solid #e6e8ea;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 1);
    -webkit-transition: all 0.3s ease-out;
    -moz-transition: all 0.3s ease-out;
    -ms-transition: all 0.3s ease-out;
    -o-transition: all 0.3s ease-out;
    transition: all 0.3s ease-out;
}
.wrapper-dropdown-3 .dropdown li i {
    float: right;
    color: inherit;
    font-size: inherit;
}
.wrapper-dropdown-3 .dropdown li:first-of-type a {
    border-radius: 7px 7px 0 0;
}
.wrapper-dropdown-3 .dropdown li:last-of-type a {
    border: none;
    border-radius: 0 0 7px 7px;
}
/* Hover state */
.wrapper-dropdown-3 .dropdown li:hover a {
    background: #f3f8f8;
}
/* Active state */
.wrapper-dropdown-3.active .dropdown {
    opacity: 1;
    pointer-events: auto;
    z-index: 9999;
}
/* No CSS3 support */
.no-opacity .wrapper-dropdown-3 .dropdown,
.no-pointerevents .wrapper-dropdown-3 .dropdown {
    display: none;
    opacity: 1;
    /* If opacity support but no pointer-events support */
    pointer-events: auto;
    /* If pointer-events support but no pointer-events support */
}
.no-opacity .wrapper-dropdown-3.active .dropdown,
.no-pointerevents .wrapper-dropdown-3.active .dropdown {
    display: block;
}
ul.navigation {
    height: 100%;
    padding-top: 0;
    padding-bottom: 0;
    white-space: nowrap;
    z-index: 1;
    position: relative;
    margin-top: 0;
    margin-bottom: 0;
    margin-left: 323px;
    background-repeat: repeat;
    background-position: center center;
    color: #000000;
    font-size: 16px;
    font-weight: bold;
    padding-left: 20px;
    padding-right: 20px;
}
ul.navigation,
ul.navigation ul {
    list-style: none;
}
ul.navigation ul {
    z-index: 1000;
    width: auto;
    margin: 0;
    padding: 10px 0 10px 0;
    position: absolute;
    color: #ffffff;
    font-weight: normal;
    background-color: #34495e;
}
ul.navigation > li > ul {
    right: 0;
}
ul.navigation > li.has-children:after {
    content: ' ';
    display: block;
    position: absolute;
    height: 0;
    width: 0;
    border: 8px solid transparent;
    bottom: 0;
    left: 50%;
    margin-left: -8px;
    border-bottom-color: #34495e;
}
ul.navigation ul,
ul.navigation > li.has-children:after {
    -webkit-transition: all 100ms ease-in;
    -moz-transition: all 100ms ease-in;
    -ms-transition: all 100ms ease-in;
    -o-transition: all 100ms ease-in;
    transition: all 100ms ease-in;
    visibility: hidden;
    opacity: 0;
}
ul.navigation ul ul {
    top: 0;
    left: 100%;
    background-color: #34495e;
}
ul.navigation ul ul.openLeft {
    left: auto;
    right: 100%;
}
ul.navigation ul ul.openRight {
    right: auto;
    left: 100%;
}
ul.navigation a {
    text-decoration: none;
    height: 100%;
    outline: none;
    color: #000000;
    font-size: 16px;
    font-weight: bold;
}
ul.navigation li {
    position: relative;
    list-style: none;
    margin: 0;
    height: 100%;
}
ul.navigation li > a {
    display: block;
    line-height: 45px;
    margin-left: 0px;
    margin-right: 0px;
    margin-top: 0px;
    margin-bottom: 0px;
    padding-left: 15px;
    padding-right: 15px;
    padding-top: 10px;
    padding-bottom: 10px;
}
ul.navigation li li {
    padding: 0 10px;
}
ul.navigation > li {
    position: relative;
    float: left;
    display: block;
}
ul.navigation li:hover > ul,
ul.navigation > li.has-children:hover:after {
    visibility: visible;
    opacity: 1;
}
ul.navigation li:hover {
    background-color: transparent;
}
ul.navigation ul > li {
    line-height: 15px;
}
ul.navigation ul > li > a {
    padding: 0 15px;
    text-align: left;
    margin-left: 9px;
    margin-right: 2px;
    padding-left: 10px;
    padding-right: 10px;
    padding-top: 10px;
    padding-bottom: 10px;
    line-height: 15px;
}
ul.navigation ul > li:hover {
    background-color: #fa8c00;
}
#resultList .glossary .term a:visited {}
#resultList h3.title a:visited {
    color: #2200C1;
    text-decoration: underline;
}
#resultList .glossary .term a:focus {}
#resultList h3.title a:focus {
    color: #2200C1;
    text-decoration: underline;
}
ul.navigation li > a:hover {
    background-repeat: repeat;
    color: #fa8c00;
}
ul.navigation ul > li > a:hover {
    background-repeat: repeat;
    color: #ffffff;
    font-weight: normal;
}
ul.navigation ul ul > li > a:hover {
    background-repeat: repeat;
}
ul.navigation ul ul ul > li > a:hover {
    background-repeat: repeat;
}
ul.navigation ul ul ul ul > li > a:hover {
    background-repeat: repeat;
}
#resultList .glossary .term a:hover {}
#pagination a:hover {
    border-top: solid 1px #e2e2e6;
}
#resultList h3.title a:hover {
    text-decoration: underline;
}
#resultList .glossary .term a:active {}
#resultList h3.title a:active {
    color: #2200C1;
    text-decoration: underline;
}
ul.navigation ul > li.has-children > a:after {
    position: absolute;
    border: none;
    content: "'00bb";
    right: 5px;
    top: 9px;
}
nav.tab-bar {
    height: auto;
    line-height: inherit;
    padding: 10px 0;
    display: block;
    padding-top: 10px;
    padding-bottom: 10px;
    background-color: #ffffff;
}
nav.tab-bar .menu-icon {
    display: none;
}
.tab-bar-section {
    position: relative;
}
.tab-bar-section.middle {
    width: 100%;
    left: 0;
    right: 0;
    height: auto;
    min-height: 2.5em;
}
.tab-bar-section a.logo {
    border: none;
    padding: 0;
    margin: 0;
    position: absolute;
    display: block;
    width: 323px;
    height: 75px;
    top: 50%;
    bottom: auto;
    margin-top: -37.5px;
    left: 0;
    background: transparent url('Images/logo.png') no-repeat center center;
    -pie-background: transparent url('Skins/Fluid/Stylesheets/Images/logo.png') no-repeat center center;
}
/* Topbar Menu Functionality Styles */
#navigation.topbar > .row {
    height: 100%;
}
#navigation.topbar {
    background-color: #292928;
    padding-top: 10px;
    padding-bottom: 10px;
}
<div class="row topNav">
    <div class="small-6 columns">
        <div class="navigation-wrapper">
            <ul class="navigation clearfix">
                <li class="has-children manager supervisor agent" value="1"><a href="#">Applications</a>
                    <ul class="sub-menu">
                        <li class="supervisor" value="3"><a href="stuff.htm">Supe</a></li>
                        <li class="supervisor agent" value="2"><a href="stuff2.htm">AAU</a>
                        </li>
                    </ul>
                    <li class="has-children manager supervisor" value="2"><a href="#">Channels</a>
                        <ul class="sub-menu">
                            <li class="manager" value="1"><a href="#">Inbound</a>
                            </li>
                            <li class="manager" value="2"><a href="#">Outbound</a>
                            </li>
                            <li class="has-children manager" value="3"><a href="#">Dial</a>
                                <ul class="sub-menu manager">
                                    <li value="1"><a href="#">Overview</a>
                                    </li>
                                    <li value="2"><a href="#">List</a>
                                    </li>
                                    <li value="3"><a href="#">Call</a>
                                    </li>
                                    <li value="4"><a href="#">DNC</a>
                                    </li>
                                    <li value="5"><a href="#">Disp</a>
                                    </li>
                                    <li value="6"><a href="#">SMS</a>
                                    </li>
                                </ul>
                            </li>
                            <li class="has-children manager" value="4"><a href="#">Email</a>
                                <ul class="sub-menu manager">
                                    <li value="1"><a href="#">Overview</a>
                                    </li>
                                    <li value="2"><a href="#">QR</a>
                                    </li>
                                </ul>
                            </li>
                            <li class="has-children manager" value="5"><a href="#">Chat</a>
                                <ul class="sub-menu">
                                    <li class="manager supervisor" value="1"><a href="#">Overview</a>
                                    </li>
                                    <li class="manager supervisor" value="2"><a href="#">CP</a>
                                    </li>
                                    <li class="manager supervisor agent" value="3"><a href="#">QR</a>
                                    </li>
                                </ul>
                            </li>
                            <li class="manager" value="6"><a href="#">WII</a>
                            </li>
                        </ul>
                    </li>
                    <li class="has-children manager supervisor agent" value="3"><a href="#">System</a>
                        <ul class="sub-menu">
                            <li class="manager studio supervisor agent" value="1"><a href="#">Account</a>
                            </li>
                            <li class="manager" value="2"><a href="#">AB</a>
                            </li>
                            <li class="manager" value="3"><a href="#">AM</a>
                            </li>
                            <li class="manager" value="4"><a href="#">CA</a>
                            </li>
                            <li class="manager" value="5"><a href="#">DI</a>
                            </li>
                            <li class="manager supervisor" value="6"><a href="#">HOO</a>
                            </li>
                            <li class="manager" value="7"><a href="#">POC</a>
                            </li>
                            <li class="manager supervisor agent" value="8"><a href="#">QR</a>
                            </li>
                            <li class="has-children manager" value="9"><a href="#">SM</a>
                                <ul class="sub-menu manager">
                                    <li value="1"><a href="#">SK</a>
                                    </li>
                                    <li value="2"><a href="#">PR</a>
                                    </li>
                                    <li value="3"><a href="#">PC</a>
                                    </li>
                                    <li value="4"><a href="#">SCP</a>
                                    </li>
                                </ul>
                            </li>
                            <li class="has-children manager" value="10"><a href="#">USM</a>
                                <ul class="sub-menu manager">
                                    <li value="1"><a href="#">US</a>
                                    </li>
                                    <li value="2"><a href="#">TE</a>
                                    </li>
                                    <li value="3"><a href="#">SECTE</a>
                                    </li>
                                    <li value="4"><a href="#">LO</a>
                                    </li>
                                    <li value="5"><a href="#">FE</a>
                                    </li>
                                </ul>
                            </li>
                            <li class="has-children manager" value="11"><a href="#">ST</a>
                                <ul class="sub-menu manager">
                                    <li value="1"><a href="#">STN</a>
                                    </li>
                                    <li value="2"><a href="#">SP</a>
                                    </li>
                                </ul>
                            </li>
                            <li class="manager" value="12"><a href="#">UC</a>
                            </li>
                            <li class="manager supervisor" value="13"><a href="#">TA</a>
                            </li>
                            <li value="14"><a href="#">AI</a>
                            </li>
                            <li class="manager" value="15"><a href="#">AAA</a>
                            </li>
                        </ul>
                    </li>
                    <li class="has-children reporting manager supervisor agent" value="4"><a href="#">Reporting</a>
                        <ul class="sub-menu">
                            <li class="manager supervisor agent" value="1"><a href="#">Pre-built</a>
                            </li>
                            <li class="manager supervisor" value="2"><a href="#">Custom</a>
                            </li>
                            <li class="manager" value="3"><a href="#">DDR</a>
                            </li>
                            <li class="has-children manager supervisor" value="4"><a href="#">DM</a>
                                <ul class="sub-menu manager supervisor">
                                    <li value="1"><a href="#">DB</a>
                                    </li>
                                    <li value="2"><a href="#">WI</a>
                                    </li>
                                </ul>
                            </li>
                            <li class="has-children manager" value="5"><a href="#">DD Download</a>
                                <ul class="sub-menu">
                                    <li value="1"><a href="#">DDR</a>
                                    </li>
                                    <li value="2"><a href="#">cU</a>
                                    </li>
                                </ul>
                            </li>
                            <li class="manager" value="6"><a href="#">RL</a>
                            </li>
                            <li value="7"><a href="#">RS</a>
                            </li>
                            <li class="manager" value="8"><a href="#">iV</a>
                            </li>
                            <li value="9"><a href="#">DD</a>
                            </li>
                        </ul>
                    </li>
                    <li class="has-children manager studio" value="5"><a href="#">Design</a>
                        <ul class="sub-menu manager studio">
                            <li value="1"><a href="#">ST</a>
                            </li>
                            <li value="2"><a href="#">SCSC</a>
                            </li>
                        </ul>
                    </li>
                    <li class="has-children manager supervisor" value="6"><a href="#">Optimization </a>
                        <ul class="sub-menu">
                            <li class="manager" value="1"><a href="#">EC</a>
                            </li>
                            <li class="manager" value="2"><a href="#">iV</a>
                            </li>
                            <li class="manager supervisor agent" value="3"><a href="#">iCWO</a>
                            </li>
                            <li class="manager supervisor" value="4"><a href="#">WII</a>
                            </li>
                        </ul>
                    </li>
            </ul>
        </div>
    </div>
    <div class="small-3 columns">
        <div class="wrapper-demo">
            <div id="dd" class="wrapper-dropdown-3" tabindex="1">
                <span>I am a(n): </span>
                <ul class="dropdown">
                    <li><a href="#"><i class="icon-envelope icon-large"></i>Agent</a></li>
                    <li><a href="#"><i class="icon-envelope icon-large"></i>Supervisor</a></li>
                    <li><a href="#"><i class="icon-envelope icon-large"></i>Manager</a></li>
                    <li><a href="#"><i class="icon-envelope icon-large"></i>Workflow Designer</a></li>
                </ul>
            </div>
        </div>
    </div>
</div>