首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自定义选择显示页面刷新后的选定值

自定义选择显示页面刷新后的选定值
EN

Stack Overflow用户
提问于 2020-05-12 14:56:47
回答 1查看 380关注 0票数 1

我试图建立我的自定义选择,但我是塞。在页面刷新之前,一切都很好。我是一个jQuery乞丐,我在代码库上找到了这个。

代码语言:javascript
复制
$('select').each(function(){
    var $this = $(this), numberOfOptions = $(this).children('option').length;

    $this.addClass('select-hidden');
    $this.wrap('<div class="select"></div>');
    $this.after('<div class="select-styled"></div>');

    var $styledSelect = $this.next('div.select-styled');
    $styledSelect.text($this.children('option').eq(0).text());

    var $list = $('<ul />', {
        'class': 'select-options'
    }).insertAfter($styledSelect);

    for (var i = 0; i < numberOfOptions; i++) {
        $('<li />', {
            text: $this.children('option').eq(i).text(),
            rel: $this.children('option').eq(i).val()
        }).appendTo($list);
    }

    var $listItems = $list.children('li');

    $styledSelect.click(function(e) {
        e.stopPropagation();
        $('div.select-styled.active').not(this).each(function(){
            $(this).removeClass('active').next('ul.select-options').hide();
        });
        $(this).toggleClass('active').next('ul.select-options').toggle();
    });

    $listItems.click(function(e) {
        e.stopPropagation();
        $styledSelect.text($(this).text()).removeClass('active');
        $this.val($(this).attr('rel'));
        $list.hide();
        //console.log($this.val());
    });

    $(document).click(function() {
        $styledSelect.removeClass('active');
        $list.hide();
    });
});
代码语言:javascript
复制
.select-hidden {
	 display: none;
	 visibility: hidden;
	 padding-right: 10px;
}
 .select {
	 cursor: pointer;
	 display: inline-block;
	 position: relative;
	 font-size: 12px;
	 color: #005ca5;
	 height: 40px;
	 width: 155px;
}
 .select-styled {
	 position: absolute;
	 top: 0;
	 right: 0;
	 bottom: 0;
	 left: 0;
	 border: 1px solid #a2a2a2;
	 padding: 10px 15px;
	 border-radius: 20px;
}
 .select-styled:after {
	 content: "";
	 width: 0;
	 height: 0;
	 border: 7px solid transparent;
	 border-color: #005ca5 transparent transparent transparent;
	 position: absolute;
	 top: 16px;
	 right: 10px;
}
 .select-styled.active {
	 border-bottom-left-radius: 0px;
	 border-bottom-right-radius: 0px;
}
 .select-styled.active:after {
	 top: 9px;
	 border-color: transparent transparent #005ca5 transparent;
}
 .select-options {
	 display: none;
	 position: absolute;
	 top: 100%;
	 right: 0;
	 left: 0;
	 z-index: 999;
	 margin: 0;
	 padding: 0;
	 list-style: none;
	 background-color: #fff;
	 overflow-y: scroll;
	 max-height: 200px;
	 border: 1px solid #a2a2a2;
	 border-top: 0px;
}
 .select-options li {
	 margin: 0;
	 padding: 12px 0;
	 text-indent: 15px;
	 transition: 0.3s;
}
 .select-options li:hover {
	 color: #fff;
	 background: #005ca5;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="color" id="frm-statusForm-form-color" class="select-hidden">
<option value="#E19244">Orange</option>
<option value="#666666">Grey</option>
<option value="#886666" selected="">Brown</option>
<option value="#2FB483">Green</option>
<option value="#005CA5">Blue</option>
<option value="#71DFFC">Light blue</option></select>

我正在使用php,当我选择一个值时,它会保存所选的值。在源代码中,您可以看到默认的select select值,但在我的自定义select中看不到。选择是自动生成的,所以我不能更改HTML.,所以唯一的方法是更改jQuery.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-12 15:29:26

您可以使用localeStorage API来实现这种实现,localeStorage有.setItem().getItem()方法,在这些方法中,即使在刷新之后,也可以在应用程序中设置要使用的值。

变动:

代码语言:javascript
复制
var styledText = $this.children('option').eq(0).text();
if(localStorage.getItem($this.attr('name'))) {
  styledText = localStorage.getItem($this.attr('name'));
}
$styledSelect.text(styledText);

$listItems.click

代码语言:javascript
复制
$listItems.click(function(e) {
  e.stopPropagation();
  $styledSelect.text($(this).text()).removeClass('active');
  $this.val($(this).attr('rel'));
  $list.hide();
  localStorage.setItem($this.attr('name'), $(this).text());
});

下面是一个工作的杰斯菲尔德,也是一个代码段,但是它在这里不能工作,因为堆栈溢出段是沙箱化的,不能访问localStorage:

代码语言:javascript
复制
$('select').each(function(){
    var $this = $(this), numberOfOptions = $(this).children('option').length;

    $this.addClass('select-hidden');
    $this.wrap('<div class="select"></div>');
    $this.after('<div class="select-styled"></div>');

    var $styledSelect = $this.next('div.select-styled');
    
    var styledText = $this.children('option').eq(0).text();
    if(localStorage.getItem($this.attr('name'))) {
      styledText = localStorage.getItem($this.attr('name'));
    }
    $styledSelect.text(styledText);

    var $list = $('<ul />', {
        'class': 'select-options'
    }).insertAfter($styledSelect);

    for (var i = 0; i < numberOfOptions; i++) {
        $('<li />', {
            text: $this.children('option').eq(i).text(),
            rel: $this.children('option').eq(i).val()
        }).appendTo($list);
    }

    var $listItems = $list.children('li');

    $styledSelect.click(function(e) {
        e.stopPropagation();
        $('div.select-styled.active').not(this).each(function(){
            $(this).removeClass('active').next('ul.select-options').hide();
        });
        $(this).toggleClass('active').next('ul.select-options').toggle();
    });

    $listItems.click(function(e) {
        e.stopPropagation();
        $styledSelect.text($(this).text()).removeClass('active');
        $this.val($(this).attr('rel'));
        $list.hide();
        localStorage.setItem($this.attr('name'), $(this).text());
    });

    $(document).click(function() {
        $styledSelect.removeClass('active');
        $list.hide();
    });
});
代码语言:javascript
复制
.select-hidden {
	 display: none;
	 visibility: hidden;
	 padding-right: 10px;
}
 .select {
	 cursor: pointer;
	 display: inline-block;
	 position: relative;
	 font-size: 12px;
	 color: #005ca5;
	 height: 40px;
	 width: 155px;
}
 .select-styled {
	 position: absolute;
	 top: 0;
	 right: 0;
	 bottom: 0;
	 left: 0;
	 border: 1px solid #a2a2a2;
	 padding: 10px 15px;
	 border-radius: 20px;
}
 .select-styled:after {
	 content: "";
	 width: 0;
	 height: 0;
	 border: 7px solid transparent;
	 border-color: #005ca5 transparent transparent transparent;
	 position: absolute;
	 top: 16px;
	 right: 10px;
}
 .select-styled.active {
	 border-bottom-left-radius: 0px;
	 border-bottom-right-radius: 0px;
}
 .select-styled.active:after {
	 top: 9px;
	 border-color: transparent transparent #005ca5 transparent;
}
 .select-options {
	 display: none;
	 position: absolute;
	 top: 100%;
	 right: 0;
	 left: 0;
	 z-index: 999;
	 margin: 0;
	 padding: 0;
	 list-style: none;
	 background-color: #fff;
	 overflow-y: scroll;
	 max-height: 200px;
	 border: 1px solid #a2a2a2;
	 border-top: 0px;
}
 .select-options li {
	 margin: 0;
	 padding: 12px 0;
	 text-indent: 15px;
	 transition: 0.3s;
}
 .select-options li:hover {
	 color: #fff;
	 background: #005ca5;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="color" id="frm-statusForm-form-color" class="select-hidden">
<option value="#E19244">Orange</option>
<option value="#666666">Grey</option>
<option value="#886666" selected="">Brown</option>
<option value="#2FB483">Green</option>
<option value="#005CA5">Blue</option>
<option value="#71DFFC">Light blue</option></select>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61754982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档