错误的定时问题,Telerik RadEditor控件's客户端事件和jquery's on page

Bad timing issue, Telerik RadEditor control's client side events and jquery's on page ready event

本文关键字:事件 客户端 jquery page on 定时 RadEditor Telerik 控件 错误 问题      更新时间:2023-09-26

我初始化了一个对象,并传入了一个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。

如何解决这个时间问题?

我在telerik控件方面也遇到过同样的问题。您需要将$(doucment(.ready中的逻辑放入客户端page_load中$(文档(.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); 
     }
}

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

$(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
}