2

非常奇怪的错误,如果未找到替换变量(在 localStorage 中),则以下脚本完全删除了 Value 属性而不是将其单独保留。

我的html:

<form>
<input class="xfield" type="hidden" name="source" value="x111" />
</form>

JS

<script>

     var thecode = localStorage.getItem("xcode");
     if (thecode != "undefined" && thecode != "null") {
      $(".xfield").attr("value",thecode);
}

</script>

基本上,如果在 localStorage 中找到 xcode 项目,一切正常,默认值将被替换。但是,如果在 localStorage 中找不到 xcode,则结果(而且似乎只有在 Chrome 中,Firefox 工作正常,并且保持默认状态)是 value 属性被完全删除。

我尝试过使用.prop而不是包装它,$(window).load(function(){但没有任何效果。知道我在这里可能做错了什么吗?

4

2 回答 2

3

因为"underfined" !== undefined"null" != null

if (thecode!==null) {
    $(".xfield").val(thecode);
}
于 2014-10-09T17:02:11.980 回答
1

如果您的目标是检查undefinedor null,则检查undefinedor null、 not "undefined"and "null"(既不是undefinednor null)。:-)

var thecode = localStorage.getItem("xcode");
if (thecode != undefined) { // Loose != works for both undefined and null
    $(".xfield").attr("value",thecode);
}

getItem不会返回(如果键不存在则undefined需要返回,如果存在则返回字符串 [或其他可存储的,如画布]),所以:null

var thecode = localStorage.getItem("xcode");
if (thecode !== null) {
    $(".xfield").attr("value",thecode);
}

如果在您关心的情况下代码始终是非空白的,您可以直接测试thecode

var thecode = localStorage.getItem("xcode");
if (thecode) {
    $(".xfield").attr("value",thecode);
}

这将为任何真实值设置它。undefined, null, 和""都是假的(就像0, NaN, 和一样false,但你不会从 中得到这些getItem)。

于 2014-10-09T17:03:06.970 回答