我有一个初始化的对象,并传入一个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。
如何解决此时间问题?
答案 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
}