即使在使用localStorage刷新页面之后,也可以检索禁用的属性
Retrieve the disabled attributes even after page refresh using localStorage
我有一个HTML代码,其中有一个select标记,选项是动态填充的。一旦onchange事件发生,所选选项将被禁用。此外,如果发生任何页面导航,则会检索以前填充的选项。
在我的情况下,一旦填充了选项并选择了任何选项,就会被禁用(意图不允许用户再次选择它)。因此,可能会出现这样的情况:在3个选项中,只有两个选项被选中并禁用,因此一旦我刷新,之前未选中的选项就应该被启用。并且之前选择的选项应该被禁用。但我的代码在刷新后启用了所有选项。我该怎么解决这个问题?
html代码
<select id="convoy_list" id="list" onchange="fnSelected(this)">
<option>Values</option>
</select>
js代码
//此函数说明选项更改上发生了什么
function fnSelected(selctdOption){
var vehId=selctdOption.options[selctdOption.selectedIndex].disabled=true;
localStorage.setItem("vehId",vehId);
//some code and further process
}
//该函数在下拉列表中显示过程——关于数据如何填充
function test(){
$.ajax({
//some requests and data sent
//get the response back
success:function(responsedata){
for(i=0;i<responsedata.data;i++):
{
var unitID=//some value from the ajax response
if(somecondition)
{
var select=$(#convoy_list);
$('<option>').text(unitID).appendTo(select);
var conArr=[];
conArr=unitID;
test=JSON.stringify(conArr);
localStorage.setItem("test"+i,test);
}
}
}
});
}
//在显示功能中--刷新时如何检索存储的内容。
function display(){
for(var i=0;i<localStorage.length;i++){
var listId=$.parseJSON(localStorage.getItem("test"+i)));
var select=$(#list);
$('<option>').text(listId).appendTo(select);
}
}
在显示功能中,检索以前为下拉菜单填充的值,但未禁用所选的选项。相反,所有选项都已启用。我在显示功能中尝试了以下操作
if(localStorage.getItem("vehId")==true){
var select=$(#list);
$('<option>').text(listId).attr("disabled",true).appendTo(select);
}
但这并不奏效。
页面上的元素不应该具有相同的id
<select id="convoy_list" onchange="fnSelected(this)">
<option>Values</option>
</select>
在fnSelected()
函数中,无论选择了什么项目,都始终存储项目{"vehId" : true}
。相反,您应该首先为每个<option'>
分配一些Id,然后只为它们保存状态。例如:
function test(){
$.ajax({
//some requests and data sent
//get the response back
success:function(responsedata){
for(i=0;i<responsedata.data;i++):
{
var unitID=//some value from the ajax response
if(somecondition)
{
var select=$("#convoy_list"); ''don't forget quotes with selectors.
var itemId = "test" + i;
$('<option>').text(unitID).attr("id", itemId) ''we have set id for option
.appendTo(select);
var conArr=[];
conArr=unitID;
test=JSON.stringify(conArr);
localStorage.setItem(itemId,test);
}
}
}
});
}
现在我们可以在fnSelected()
:中使用该id
function fnSelected(options) {
var selected = $(options).children(":selected");
selected.prop("disabled","disabled");
localStorage.setItem(selected.attr("id") + "disabled", true);
}
现在在display()
:
function display(){
for(var i=0;i<localStorage.length;i++){
var listId = $.parseJSON(localStorage.getItem("test"+i)));
var select = $("convoy_list");
var option = $('<option>').text(listId).id(listId);
.appendTo(select);
if(localStorage.getItem(listId + "disabled") == "true"){
option.prop("disabled","disabled");
}
option.appendTo(select);
}
}
此外,您可能无意在fnSelected中使用以下快捷方式:var a = b = val;
与b = val; var a = b;
相同
所以你的fnSelected()函数相当于
function fnSelected(selctdOption){
selctdOption.options[selctdOption.selectedIndex].disabled=true;
var vehId = selctdOption.options[selctdOption.selectedIndex].disabled;
localStorage.setItem("vehId",vehId); '' and "vehId" is just a string, always the same.
}
小心一些错误,我没有测试所有这些,但希望逻辑能被理解。
相关文章:
- 即使光标位于屏幕边缘,也可以跟踪鼠标速度
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 在下拉列表中的页面加载中已经选择了一个选项,该选项也可以更改
- javascript数组既可以是数字数组,也可以是关联数组
- 我需要一个注册按钮,它可以将数据发送到mySQL服务器,也可以在单击时重定向
- 在更改时,如果没有使用jquery更改,也可以删除对select元素的关注
- jQuery聚焦文本框并转到末尾,但也可以设置光标的位置,以便用户可以看到它
- regex某个字符可以存在也可以不存在,但之后什么都没有
- 即使它在 Chrome 浏览器上不起作用,也可以单击
- 即使在从DOM中删除后,也可以保存jQuery对象
- 我无法获得热图.js即使是简单的热图也可以工作
- 在jquery中使用.on时需要帮助,以便它也可以处理动态数据
- JQUERY - .html() 也可以查看 php
- 如何创建在引导程序 3 中也可以纵向扩展的响应式映像
- Socket.io 聊天应用程序,也可以发送图像甚至文件
- 将信息提交到url,也可以打开PDF
- 闪烁也可以隐藏的文本
- 将标签的信息传递到php并在另一个页面中显示(也可以在另一页面中更新)
- HTML5视频,使用Javascript更改源代码,不在Safari上加载,在Chrome上也可以
- 即使在使用localStorage刷新页面之后,也可以检索禁用的属性