【问题标题】:Uncaught TypeError in javascript functionjavascript函数中未捕获的TypeError
【发布时间】:2012-10-16 23:02:38
【问题描述】:
Storage.prototype.setObj = function(key, obj) {
    return this.setItem(key, JSON.stringify(obj))
    ^-----Error in this line: Uncaught TypeError: Accessing selectionDirection on an input element that cannot have a selection
}
var selected = jQuery('input:checkbox.mychkbox:checked').each(function() {
        return this.id;
});
sessionStorage.setObj("savedCollSearch",selected);

我正在使用 jQuery 1.7.2 和 Chrome 22。 此错误在 Firefox 16 中显示为未捕获的异常。在 SO 和 Google 中搜索无济于事,我不知道如何解决此问题。

我 100% 确定 jQuery 已正确加载。

【问题讨论】:

  • 选择的是字符串而不是json对象
  • @Amareswar: selected 是一个 json 对象。
  • @raina77ow:你应该阅读这个:developer.mozilla.org/en-US/docs/DOM/Storage
  • @Amareswar:没有“json 对象”这样的东西。
  • @raina77ow: 好吧,你让我明白了:-P 当人们说“json 对象”时,我有点烦,它是一个“JavaScript 对象”。 JSON 是数据的字符串表示形式,恰好类似于 JavaScript 对象语法。

标签: javascript json html session-storage


【解决方案1】:

这个表达式...

var selected = jQuery('input:checkbox.mychkbox:checked').each(function() {
  return this.id;
});

... 似乎在这里被误用:它会返回一个 jQuery 包装的选中复选框元素集合,这可能不太容易字符串化(因为循环引用)。

(作为旁注,.each 将在没有id 的第一个元素处停止迭代,或者将其设置为空字符串,但这并不重要)

你可能想改用这个:

var selected = jQuery('input:checkbox.mychkbox:checked').map(function() {
  return this.id;
}).get();

【讨论】:

  • 我把它当作地图而不是每个地图,直到我在这里读到:stackoverflow.com/a/749119/1446848 地图比每个地图都占用更多内存。你能指点我一些关于“循环引用”的文档吗?以前在 javascript 中从未听说过。
  • @exception: mapeach 是用于不同目的的不同函数。为您正在做的事情使用正确的,停止微优化!一个可能更“内存密集”,但除非你有 1,000,000 个元素,否则没关系。
  • @exception 为什么,这里有a whole lot 这样的问题。甚至是一个特殊的标签。 )
  • @exception 当然,它是内存密集型的——map 用于返回一个集合,所以它必须将结果存储在某个地方。 ) each,另一方面,通常只是为集合的每个元素一些事情。
猜你喜欢
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多