我在模块模式中使用JQuery。我有一个关于使用JQuery Objects的问题。
请参阅以下示例:
var myFeature = {
'config' : {
'container' : $('#myFeature'),
'init' : function(config) {
myFeature.config.container.css('display', 'none');
}
}`
为什么上面的例子不起作用?在模块模式中使用Jquery Objects时最佳做法是什么?
答案 0 :(得分:2)
假设我在正确的位置添加了缺失的}
(我最后还添加了一个分号,我不建议依赖自动分号插入的恐怖):
var myFeature = {
'config' : {
'container' : $('#myFeature'),
}
'init' : function(config) {
myFeature.config.container.css('display', 'none');
}
};
...然后,我能看到为什么它不起作用的唯一原因是,如果此代码在元素存在之前执行。因此,您的container
属性最终会引用其中没有任何内容的jQuery集,因为在该属性初始化时,没有id
{{1 }}
解决方案是在您知道元素存在时初始化"myFeature"
属性,或者根本不使用container
属性,因为{{1}查找元素非常,非常快。
如果元素位于页面的主标记中,请确保包含上述代码的container
标记在标记后为。通常的建议是将id
标记放在页面的最末端,就在结束script
标记之前,以便页面标记中的所有元素都存在于脚本代码时运行。
答案 1 :(得分:1)
请参阅以下更改:
var myFeature = {
'config' : {
'container' : $('#myFeature') // 1: removed comma
}, // 2: added comma and right curly brace
'init' : function(config) {
myFeature.config.container.css('display', 'none');
}
}; // 3: added semi-colon