非常奇怪的错误,如果找不到替换变量(在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(){
,但没有任何效果。知道我在这里做错了吗?
答案 0 :(得分:3)
因为"underfined" !== undefined
和"null" != null
if (thecode!==null) {
$(".xfield").val(thecode);
}
答案 1 :(得分:1)
如果您的目标是检查undefined
或null
,请检查undefined
或null
,而不是"undefined"
和"null"
(既不是undefined
也不是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
返回。