jQuery:在对象文字中定义元素?

时间:2011-02-26 16:54:00

标签: javascript jquery object object-literal

我正在尝试在名为globals的对象中定义所有主要变量。问题是,当使用membersTab等前一个元素来抓取faces时,我会收到错误:

  

未捕获的TypeError:无法读取undefined的属性'membersTab'。

我做错了什么?

 var globals = {
  siteWrap      : $('#siteWrap'),
  content       : $('#content'),
  membersTab    : $('#membersTab'),
  faces     : globals.membersTab.find('.member'),
  members       : {},
  mID       : globals.siteWrap.attr('mID'),
  uID       : globals.siteWrap.attr('uID'),
  mTag      : globals.siteWrap.attr('mTag'),
  uFirst        : globals.siteWrap.attr('fn'),
  uLast     : globals.siteWrap.attr('ln'),
  host      : globals.siteWrap.attr('host'),
  dialogueBox   : $('#dialogueBox'),
  screen        : $('#screen').click(function(){ closeDialogue(true); })
  }

2 个答案:

答案 0 :(得分:1)

如果globals的定义不在$(document).ready()内,则页面可能尚未加载,因此$('#membersTab')会返回空集合。

此外,当您声明faces时,尚未创建对象globals

最简单的方法可能是

globals = {};
globals.membersTab = $('#membersTab');
globals.faces = globals.membersTab.find('.member');
...

答案 1 :(得分:0)

在文字关闭之前,成员membersTab未初始化。

首先声明全局对象。空分配不是必需的,但是为了清楚起见,如果编辑器具有该支持,也可以提供良好的代码完成。这可以减少输入错误。

var globals = {
    siteWrap = null,
    content = null,
    ...
};

加载DOM后初始化对象。

$(function(){
    globals.siteWrap = $('#siteWrap');
    globals.content = $('#content');
    ...
})