Jquery .attr和.prop删除Chrome中的属性

时间:2014-10-09 16:58:37

标签: javascript jquery google-chrome attr prop

非常奇怪的错误,如果找不到替换变量(在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(){,但没有任何效果。知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:3)

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

if (thecode!==null) {
    $(".xfield").val(thecode);
}

答案 1 :(得分:1)

如果您的目标是检查undefinednull,请检查undefinednull,而不是"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);
}

这将为任何真实价值设定它。 undefinednull""都是假的(0NaNfalse,但你不会得到那些从getItem返回。