2013-01-17 23 views
1

我正在使用模块化模式编写我的JS代码。我有一个引用所有我的dom元素的对象。我已经把选择器放到了我在代码执行的后面添加的div中。当我添加该div,并使用jQuery.css使用存储在我的引用对象中的引用时,它不起作用。jQuery.css不工作的元素添加追加?

NameSpace = { 
    objects: { 
     someButton: $('.someButton'), 
     someDiv: $('.someDiv'), 
     myDiv: $('.myDiv'), //This will be added later 
     //Other references 
     . 
     . 
    }, 

    bindHandlers: { 
     NameSpace.objects.someButton.on('click', someEventHandler); 
     //Other bindings 
     . 
     . 
    }, 

    eventHandlers: { 
     someEventHandler: function(e){ 
      var div = jQuery('<div class="myDiv"></div>'); 
      NameSpace.objects.someDiv.append(div); 

      //Doesn't work! If I use jQuery('.myDiv'), then it works, 
      //but kills my modular style 
      NameSpace.objects.myDiv.css({ //some styles }); 
     }, 
     //Other event handlers 
    } 
} 
//Other code 

此方法适用于存在于页面中的对象,但不适用于上面添加的div。

任何帮助?

+0

http://jsfiddle.net/myrjY/ 1.9和2.0之间有一些区别在链接 – dsa

+0

上检查出来有什么样的区别?我找不到从你的小提琴中找到的东西... –

+0

尝试在版本1.9和2.0之间切换 – dsa

回答

3

JavaScript是程序性的,此行myDiv: $('.myDiv')只计算一次,而不是每次调用它。

这意味着您的选择器$('.myDiv')已填充到页面的开头。

要解决这一点,你就必须让你的变量的函数

objects: { 
     someButton: $('.someButton'), 
     someDiv: $('.someDiv'), 
     myDiv: function(){ return $('.myDiv'); }, //This will be added later 
     //Other references 
     . 
     . 
    }, 

应该重新计算你怎么称呼它选择每次。

让我知道如果技巧的作品。

+0

尝试它立即! –

+0

尝试过它的人...但它会抛出一个错误,当控制台记录objects.myDiv时,它会显示我为'函数'。这意味着它正在分配功能,但不是返回值! –

+1

@RutwickGangurde而不是'objects.myDiv()'。 – Chris