Javascript jQuery.css不适用于添加了append的元素?
我使用模块化模式来编写JS代码。我有一个引用了我所有dom元素的对象。我已经为一个div设置了选择器,我将在稍后的代码执行中添加该div。当我添加这个div,并使用jQuery.css使用我存储在references对象中的引用时,它不起作用Javascript jQuery.css不适用于添加了append的元素?,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我使用模块化模式来编写JS代码。我有一个引用了我所有dom元素的对象。我已经为一个div设置了选择器,我将在稍后的代码执行中添加该div。当我添加这个div,并使用jQuery.css使用我存储在references对象中的引用时,它不起作用 NameSpace = { objects: { someButton: $('.someButton'), someDiv: $('.someDiv'), myDiv: $('.myDiv'), /
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
名称空间={
对象:{
someButton:$('.someButton'),
someDiv:$('.someDiv'),
myDiv:$('.myDiv'),//这将在以后添加
//其他参考资料
.
.
},
BindHandler:{
NameSpace.objects.someButton.on('click',someEventHandler);
//其他绑定
.
.
},
事件处理程序:{
someEventHandler:函数(e){
var div=jQuery(“”);
NameSpace.objects.someDiv.append(div);
//不起作用!如果我使用jQuery('.myDiv'),那么它就起作用了,
//但却扼杀了我的模块化风格
css({//some styles});
},
//其他事件处理程序
}
}
//其他代码
这种方法适用于页面中存在的对象,但不适用于我上面添加的div
有什么帮助吗?Javascript是程序性的,这一行
myDiv:$('.myDiv')
只计算一次,而不是每次调用它
这意味着您的选择器$('.myDiv')
在页面的开头填充
要解决这个问题,必须将变量设置为函数
objects: {
someButton: $('.someButton'),
someDiv: $('.someDiv'),
myDiv: function(){ return $('.myDiv'); }, //This will be added later
//Other references
.
.
},
每次调用选择器时,它都应该重新计算选择器
让我知道这个把戏是否管用。试过了,伙计。。。但它抛出了一个错误,当console记录objects.myDiv时,它将我显示为一个“函数”。这意味着它得到的是指定的函数,而不是返回值@RutwickGangurde做
objects.myDiv()
。谢谢Florian,你的解决方案成功了!我可以对任何动态添加的元素执行此操作吗?您应该对动态添加的元素的每个选择器(对象中的选择器)执行此操作。为所有人这样做也不是一个太坏的主意,因为这样会减少混乱,也不会消耗太多资源。1.9版和2.0版之间存在一些差异请点击链接查看哪些差异?我无法从你的小提琴中找出任何东西…尝试在1.9和2.0版本之间切换