我认为这是我在 jQuery 和 javascript 中遇到的另一个技巧变量范围和 ajax 问题。
假设我有一个对象:
Container = function()
{
//CSS Style Paramaters:
this.width = "";
this.height = "";
this.margin = "";
this.margin_option = "";
this.position = "";
}
我有这个对象的一个方法,它应该从一个 xml 文件中读取一些 xml 数据并将它们存储到这个对象的成员中:
Container.prototype.readXML4Container =function()
{
var self = this;
$.get("assest/xml/layout.xml",function(xml)
{
$(xml).find("body").each(function(){
self.width = ($(this).find("width").text());
self.height = ($(this).find("height").text());
self.margin = ($(this).find("margin").text());
//And more code like this.
});
});
}
在这个函数之后,还有另一个函数需要调用它,并使用 .css() 应用 CSS 数据
Container.prototype.applyCSS = function()
{
this.readXML4Container();
$("#container").css({
'width':this.width,
'height':this.height,
'position':this.position,
'margin': this.margin
});
}
XML 文件如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<body>
<margin>0</margin>
<padding>0</padding>
<font-family>Trebuchet MS, sans-serif</font-family>
<color>#666</color>
</body>
<container>
<width>1220px</width>
<height>730px</height>
<margin>0 auto</margin>
<position>relative</position>
<font-size>1.0em</font-size>
<font-color>blue</font-color>
</container>
<Menubar>
<width>660px</width>
<height>58px</height>
<position>absolute</position>
<left>275px</left>
</Menubar>
<Mainsection>
<width>664px</width>
<height>660px</height>
<position>absolute</position>
<position-left>270px</position-left>
<position-top>60px</position-top>
</Mainsection>
</root>
我的问题是,该值似乎从未存储到成员变量中。当我创建该对象的实例并调用这两个函数时,CSS 样式永远不会应用于 HTML 中的 DOM。
但是,如果我不读取 XML 文件而只是在开始时给出一些值,它就可以正常工作。所以我知道我的 applyCSS 部分应该不错。问题应该在读取和存储阶段。
我试图解决这个问题超过一天......有人可以帮我解决这个问题吗?谢谢!