错误的计时问题,Telerik RadEditor控件的客户端事件和jquery的页面就绪事件

时间:2011-09-12 15:02:50

标签: javascript jquery telerik

我有一个初始化的对象,并传入一个radeditor控件的参数。

我认为使用我的对象设置radeditor的一些客户端事件:

 <telerik:RadEditor ...
   OnClientLoad="My_Object.SomeFunction" ... />

问题是,我的对象没有正确连接,除非我把它放在jquery的ready函数中,但是这似乎是在RadEditor事件之后触发,结果我收到错误消息:

My_Object is undefined

我这样做:

<script type="text/javascript">


 $(document).ready(function () {

  editor = $find("<%=RadEditor1.ClientID %>");

  My_Object = new MYOBJECT(editor);

 });

</script>

如果我尝试将其设置在ready函数之外,则对$find("<%=RadEditor1.ClientID %>");的调用始终为null。

但是当我把它放在ready函数中时,My_Object被实例化太晚了,当我在RadEditor控件上设置客户端事件时,它说该方法为null。

如何解决此时间问题?

3 个答案:

答案 0 :(得分:2)

我也有与telerik控件相同的问题。您需要将$(doucment).ready中的逻辑放入客户端page_load中。 $(document).ready已经在ASP.Net客户端page_load生命周期发生之前发生,因此telerik控件在客户端无法使用。

function pageLoad(sender, e)
{ 

   editor = $find("<%=RadEditor1.ClientID %>");

    My_Object = new MYOBJECT(editor); 

}

每次ASP.Net页面通过整页加载或部分回发完成整个生命周期时,都会调用此方法。

如果您只希望在初始页面加载时发生此事件,而不是在任何部分加载内部,则还可以在运行逻辑之前检查当前是否发生了部分回发。

function pageLoad(sender, e)
{ 

     if (!e.get_isPartialLoad())
     { 
         editor = $find("<%=RadEditor1.ClientID %>");

         My_Object = new MYOBJECT(editor); 
     }
}

答案 1 :(得分:0)

您可以将用于初始化对象的脚本块放在<body>的最后。您不需要依赖“ready()”处理程序,但您还要确保编辑器的DOM元素已准备好被发现和操作。 (这就是为什么当你不在<head>的脚本中使用“就绪”处理程序时它不起作用的原因 - 运行时DOM不存在。)

答案 2 :(得分:0)

$(document).ready()将在编辑器初始化之前触发。在ASP.NET AJAX客户端框架的 init 事件触发后,编辑器将可用。这发生在jQuery .ready()代码之后。您应该创建My_Object而不使用对编辑器对象的依赖,因为无论如何您将从OnClientLoad函数的处理程序获得引用:

<script type="text/javascript">
 $(document).ready(function () {
  My_Object = new MYOBJECT();
 });
</script>

SomeFunction()代码将引用作为参数传递的编辑器:

MYOBJECT.prototype.SomeFunction = function(editor){
//editor is a reference to the RadEditor client-side object
}