2 qq 28242723 qq_28242723 于 2016.02.21 08:50 提问

Web Storage 为什么用不了removeItem函数

我已经编写好了这样一串代码

 <!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>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script type="text/javascript">
var pgCt = window.localStorage.getItem("pageCount");
/*在sessionStorage中定义数据*/
window.sessionStorage.setItem("myFirstKeyInSessionStorage","valueA");
window.sessionStorage.setItem("peter","dog");
window.sessionStorage.setItem("bill","boy");
window.sessionStorage.setItem("lily","girl");
/*在localStorage中定义数据*/
window.localStorage.setItem("myFirstKeyInLocalStorage","valueA");
window.localStorage.setItem("hitler","a bad guy");
window.localStorage.setItem("washington","a good guy");
window.localStorage.setItem("bob","a friend");
/*检测浏览器是否支持Web Storage*/
function checkStorageSupport(){
    if(window.sessionStorage){
        alert("浏览器支持window.sessionStorage");
    }else{
        alert("浏览器不支持window.sessionStorage");
    }
    if(window.localStorage){
        alert("浏览器支持window.localStorage");
    }else{
        alert("浏览器不支持window.localStorage");
    }
    if(!window.sessionStorage||window.localStorage){
        alert("看来这个网页你没法使用了!换个浏览器吧!\n比如chrome");
    }
    return 0;
}
/*其它钩子函数*/
function findItemSessionStorage(){
    var key=prompt("请输入数据项","");
    var value=window.sessionStorage.getItem(key);
    alert(key+"的值为"+value);
    return 0;
}

function findItemLocalStorage(){
    var key=prompt("请输入数据项","");
    var value=window.localStorage.getItem(key);
    alert(key+"的值为"+value);
    return 0;
}

function setItemSessionStorage(){
    var key=prompt("请输入要添加或设置的数据项","");
    var value=prompt("请输入"+key+"的值","");
    window.sessionStorage.setItem(key,value);
    alert("操作成功");
    return 0;
}

function setItemLocalStorage(){
    var key=prompt("请输入要添加或设置的数据项","");
    var value=prompt("请输入"+key+"的值","");
    window.localStorage.setItem(key,value);
    alert("操作成功");
    return 0;
}
/*该区块不可用*/
function removeItemSessionStorage(){
    var key=prompt("请输入要移除的数据项","");
    eval("window.sessionStorage.removeItem("+key+");");
    alert("成功移除"+key);
    return 0;
}

function removeItemLocalStorage(){
    var key=prompt("请输入要移除的数据项","");
    eval("window.localStorage.removeItem("+key+");");
    alert("成功移除"+key);
    return 0;
}

function getLoc(){
    var a=window.location.toString()
    alert(a);
}

function onload(){
    if(pgCt!=null&&pgCt!=undefined){
        pgCt++;
    }else{
        pgCt=1;
    }
    window.localStorage.pageCount=pgCt;
    var obj = document.getElementById("lb1");
    obj.innerHTML=pgCt;
}
</script>
<title>数据库</title>
</head>

<body onload="onload();">
<font id="Sz" size="+0">
<form name="test">
<p>测试</p>
<button name="storageSupportChecker" onclick="checkStorageSupport()">测试是否存在sessionStorage和localStorage</button>
</form>
<form name="getItems">
<p>获取数据</p>
<button name="getItemSS" onclick="findItemSessionStorage()">在sessionStorage中获取数据</button>
<button name="getItemLS" onclick="findItemLocalStorage()">在localStorage中获取数据</button>
</form>
<form name="setItems">
<p>设置数据和添加数据</p>
<button name="setItemSS" onclick="setItemSessionStorage()">在sessionStorage中设置和添加数据</button>
<button name="setItemLS" onclick="setItemLocalStorage()">在localStorage中设置和添加数据</button>
</form>
<!--以下控件正在开发-->
<form name="removeItems">
<p>移除数据</p>
<button name="removeItemSS" onclick="removeItemSessionStorage()">在sessionStorage中移除数据</button>
<button name="removeItemLS" onclick="removeItemLocalStorage()">在localStorage中移除数据</button>
</form>
<form name="other">
<p>杂项</p>
<button name="getLocation" onclick="getLoc()">查看该网页链接</button>
</form>
<form name="testform">
访问次数:<label id="lb1"/>
</form>
</font>
</body>
</html>

显示的页面是这样的:
图片说明
但是为什么removeItem函数在网页中用不了
但是在chrome的控制台中执行window.sessionStorage.removeItem(key)或window.localStorage.removeItem(key)却可以

3个回答

a695929533
a695929533   2016.02.21 11:08

CSDN真辣鸡,上面的答案也是我的,字体加粗之后乱码了。
removeItemLocalStorage()里的eval改成这样:

eval("window.localStorage.removeItem('"+key+"');")
key穿进去后直接是 value,而非 'value' (一个是字符串,一个是字符串对象)。

showbo
showbo   Ds   Rxr 2016.02.21 12:14

直接移除就行了,干嘛要eval。。eval你的key要用引号括起,要不就是传递变量(输入值为字母)或者数字的。

       /*该区块不可用*/
        function removeItemSessionStorage() {
            var key = prompt("请输入要移除的数据项", "");
            window.sessionStorage.removeItem(key);
            //eval("window.sessionStorage.removeItem(" + key + ");");
            alert("成功移除" + key);
            return 0;
        }

        function removeItemLocalStorage() {
            var key = prompt("请输入要移除的数据项", "");
            window.localStorage.removeItem(key);
            //eval("window.localStorage.removeItem(" + key + ");");
            alert("成功移除" + key);
            return 0;
        }
a695929533
a695929533   2016.02.21 11:04

函数 removeItemLocalStorage()里面的eval改成这样:
** eval("window.localStorage.removeItem('"+key+"');");**

key穿进去后直接是 value,而非 'value' (一个是字符串,一个是字符串对象)。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!