将数据附加到元素有效,但我无法检索它

时间:2012-07-27 21:03:41

标签: javascript jquery object

当设置了preload选项时,我将响应数据附加到jquery插件的目标。除了我设置的数据无法访问外,这一切看起来都很有魅力。当我记录$(elm).data();时,我可以看到该对象已返回,并将相应的数据集返回到相应的键。但是当我尝试console.log($(elm).data('key'));时,我得到了不确定。我尝试var elmData = $(elm).data(); console.dir(elmData.key);时也未定义。所以我将对象记录在一行上,在控制台中看到它,尝试访问我刚刚确认存在的属性并获取undefined

这是我的功能:

this.preloadData = function(folders)
{
    var getString;
    for(var folder in folders ){
       getString = 'folder='+folders[folder]+'&uri='+uri+'&thumbSide='+options.thumbSide;
       $.get(options.handler, getString,
          function(response, serverStat, xhr)
          {
            $self.data(folder, response);   
          });
     }//for
     var $selfData = $self.data();
     console.log($selfData);//Object{ editorial : "data", testingdata : 'some meaningless words'}
     console.log($self.data());//Object{ editorial : "data", testingdata : 'some meaningless words'}
     console.log($self.data.editorial);//undefined
     console.dir($self.data('editorial'));//undefined
     console.log($selfData['editorial']);//undefined
     console.log($selfData.editorial);//undefined


     $self.data('testingdata', 'some meaningless words');
     console.log($self.data());//Object{ editorial : "data", testingdata : 'some meaningless words'}
     console.log($self.data('testingdata'));//'some meaningless words'
} 

我知道命名空间太简单了,我只是想尽可能多地减少因素来尝试并理解为什么这不起作用。我正在使用chrome进行开发,但我也在firefox中尝试过它并获得相同的效果。

----------------------------- EDIT ----------------- -------------------------

我明白现在的问题是什么。控制台反映了对象的所有更改,无论它们是在记录对象时是否生成。因此,当我记录该对象时,该属性尚不存在,因为响应尚未从服务器返回,但是日志仍然将该属性显示为已存在,因为在脚本执行的某个稍后点它存在DID。由于原始值未以相同方式记录,因此记录属性的调用显示为undefined,因为它未定义。如果我在几秒钟后引用该属性,请说明它是一个单击事件(这是我打算如何工作)。在我实际实现它之前,我真的很想调试这个函数。

2 个答案:

答案 0 :(得分:0)

你能做到吗?

$self.data['editorial']

答案 1 :(得分:0)

console.log($self.data.editorial);