【问题标题】:Jquery .attr and .prop delete the attribute in Chromejquery .attr 和 .prop 删除 Chrome 中的属性
【发布时间】:2014-10-09 16:58:37
【问题描述】:

如果没有找到替换变量(在 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(){ 中,但没有任何效果。知道我在这里可能做错了什么吗?

【问题讨论】:

  • 你试过$(".xfield").val(thecode);吗?
  • 会不会是把“null”和“undefined”当成字符串,而它们是关键字?

标签: javascript jquery google-chrome attr prop


【解决方案1】:

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

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

【讨论】:

  • 是的,这行得通,由于某些原因,我没有意识到我在那里有一个字符串。
【解决方案2】:

如果您的目标是检查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 得到这些信息)。

【讨论】:

  • 噢!感谢您在这里的全面细分,它现在可以工作了!
  • 所以这是一个奇怪的事情:我在不同的站点上使用了相同的工作代码,现在它不再工作了。尽管项目保存在本地存储中,但将输入值保留为页面默认值。我能想到的唯一主要区别是这个其他站点使用延迟加载。那或类似的东西可以防止以某种方式检索本地存储吗?
  • @Epleroma:不,但您需要确保在运行代码时相关元素存在。例如,在上面,如果你在有任何 .xfield 元素之前运行代码,那么它就是一个空操作。 当您调用$() 时,这些元素必须存在才能被$() 找到。
  • 哦,是的,我明白了。在第二个站点中使用了确切的表单样式,xfield 类和 value 属性都在那里,但它没有被修改。鉴于该项目显示为在 localStorage 中,必须存在 localStorage.getItem("xcode") 不工作或空检查有问题的问题。还有一个错误:Uncaught TypeError: undefined is not a function which may be play a part, but not sure how...
  • 好的,问题解决了。出于某种奇怪的原因,这个全新的 WP 主题运行的是 Jquery 1.1……所以它当然被 1.6+ 的函数迷惑了
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
相关资源
最近更新 更多