2010-09-06 43 views
1

即时通讯在一个页面上使用多个ASCX控件,而且如果我使用两个相同的控件,JavaScript会发生明显的冲突。所以我改变了这一切适当的OOP JavaScript,所以他们不干预,但我现在的问题是如何做HTML的一面。两个ASCX都会制作一个名为“foo”的div。那么通常的解决方法是什么?我是否也想从我的JS类中生成所有的html?Javascript Object orientation + DOM?

谢谢:)

回答

1

您可以添加runat="server"到您的DIV,使他们的服务器端控件:

<div id="foo" runat="server"> ... </div> 

然后使用控制的(产生的)客户端ID:

<script> 
    var divId = "<%= foo.ClientID %>"; 
</script> 
+0

甜美,效果不错:)。还有一件事,每个控件都有“var thisObj = new myObject();”这显然也死了。有没有办法做到这一点类似的事情?我没有用控件直接控制页面,只有控件本身。谢谢! – Matt 2010-09-06 20:48:06

+0

@Matt:我想这取决于你想要做什么。一个可能的解决方案(基于jquery)可能是这样的:'$(“#<%= foo.ClientID%>”)。slideOut();'(如果你想调用一个jquery方法)或'someMethod($ (“#<%= foo.ClientID%>”))''。 – M4N 2010-09-06 20:53:38

+0

更好的解释:每个控件都会使用页面加载的所有代码初始化函数(类)。但是如果两页都说var thisObj = new myObject();那么当一个页面调用这个对象时,那么就有两个这样的对象。在你上面的例子中,它看起来像你已经附加callSomeMethod();到一个DOM对象?如果是这样,我可以有$(“#<%= foo.ClientID%>”)。myObject.callSomeMethod();或类似的东西。希望我有道理: -/ – Matt 2010-09-06 20:56:58

1

放在他们自己的'容器':独特的ID,如div的:

... 
<div id="control1"> 
... 
<!-- Control One goes here --> 
<div class="foo">...</div> 
... 
</div> 
... 

<div id="control2"> 
... 
<!-- Control Two goes here --> 
<div class="foo">...</div> 
... 
</div> 
... 

然后,您可以先导航操纵他们的唯一命名的DIV,然后搜索类foo的元素。

要访问这些在Javascript中,你可以使用类似:

var c1 = document.getElementById("control1").getElementsByClassName('foo')[0]; 
var c2 = document.getElementById("control2").getElementsByClassName('foo')[0]; 

确保使用在每个[0],因为getElementsByClassName返回元素的数组。你(可能)只需要一个元素(不是数组对象)。

+0

有没有像parentObj.getChildOf功能( foo的ID)?或者它会如何工作? – Matt 2010-09-06 20:30:24

+0

Dang,我不能在窗口中发布代码snippits。基本上,你需要在Javascript中使用DOM遍历方法。然而,我喜欢使用jQuery(jQuery.org),因此:$(“#control1 .foo”)会返回带有类“foo”的div,这是ID为“control1”的div的子级。 – mkoistinen 2010-09-06 20:45:10

+0

噢,好极了!在这种情况下,我更容易实现M4N的答案,但你的未来将是一个很大的帮助,谢谢。 – Matt 2010-09-06 20:52:24