Hi,
I want to use several RadEditor on my web page. I started using the solution 1 of this page:
http://www.telerik.com/support/kb/aspnet-ajax/editor/setting-hidden-radeditor-in-edit-mode-on-click-and-putting-it-in-non-editable-mode-onblur.aspx
It works fine if I set one Radeditor on the page, but if I add another RadEditor on the page, it does not work.
The reproduce the problem, I paste text in the first RadEditor (works fine), but if I paste the same text on the second control (without reloading the page), I meet a "Stack overflow". I'm using IE9.
My telerik version :
Telerik.Web.Design, 2013.1.220.40
Telerik.Web.UI, 2013.1.220.40
Telerik.Web.UI.Skins, 2013.1.220.40
I attach a picture of the result and a sample of my web page (see below).
Can you tell me what I am doing wrong??
Thank you
Steeve
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="_Test2.aspx.cs" Inherits="Web._Test2" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
id
=
"Head1"
runat
=
"server"
>
<
title
>Untitled Page</
title
>
<
meta
http-equiv
=
"X-UA-Compatible"
content
=
"IE=8"
/>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
></
telerik:RadScriptManager
>
<
div
id
=
"lContent"
style
=
"background-color: lightblue;"
>First RadEditor</
div
>
<
div
style
=
"display:none"
id
=
"tContent"
>
<
telerik:RadEditor
runat
=
"server"
ID
=
"RadEditor1"
OnClientLoad
=
"OnClientLoadMandate"
>
<
Content
></
Content
>
</
telerik:RadEditor
>
</
div
>
<
br
/><
br
/><
br
/>
<
div
id
=
"div1"
style
=
"background-color: lightgray;"
>Second RadEditor</
div
>
<
div
style
=
"display:none"
id
=
"div2"
>
<
telerik:RadEditor
runat
=
"server"
ID
=
"RadEditor2"
OnClientLoad
=
"OnClientLoadProjectDesc"
>
<
Content
>RadEditor 2</
Content
>
</
telerik:RadEditor
>
</
div
>
<
telerik:RadCodeBlock
ID
=
"radCodeBlock"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
var lContent, tContent;
lContent = $get('lContent');
tContent = $get('tContent');
$addHandler(lContent, "click", lContent_Click);
var div1, div2;
div1 = $get('div1');
div2 = $get('div2');
$addHandler(div1, "click", div1_Click);
function OnClientLoadMandate(editor, args) {
var topZone = $get(editor.get_id() + "Top");
topZone.setAttribute("unselectable", "on");
topZone.setAttribute("MozUserSelect", "none");
var buttons = topZone.getElementsByTagName("*");
for (var i = 0; i <
buttons.length
; i++) {
var
a
=
buttons
[i];
a.setAttribute("unselectable", "on");
a.style.MozUserSelect
=
"none"
;
a.style.MozUserFocus
=
"none"
;
a.style.MozUserFocus
=
"ignore"
;
}
var
element
=
document
.all ? editor.get_document().body : editor.get_document();
$telerik.addExternalHandler(element, "blur", function(e)
{
var labelUpdated;
var
editorContent
= editor.get_html(true);
if (lContent.textContent == editorContent)
labelUpdated
=
false
;
else
labelUpdated
=
true
;
lContent.innerHTML
=
editorContent
;
tContent.style.display
=
'none'
;
lContent.style.display
=
''
;
if (labelUpdated)
{
//alert('Updating... ' + editorContent);
}
});
}
function lContent_Click()
{
lContent.style.display
=
'none'
;
tContent.style.display
=
''
;
var editor = $find("<%=RadEditor1.ClientID%>"); //get a reference to RadEditor client object
editor.setFocus(); //set the focus on the the editor
editor.set_html(lContent.innerHTML);
}
function OnClientLoadProjectDesc(editor, args) {
var topZone = $get(editor.get_id() + "Top");
topZone.setAttribute("unselectable", "on");
topZone.setAttribute("MozUserSelect", "none");
var buttons = topZone.getElementsByTagName("*");
for (var i = 0; i <
buttons.length
; i++) {
var
a
=
buttons
[i];
a.setAttribute("unselectable", "on");
a.style.MozUserSelect
=
"none"
;
a.style.MozUserFocus
=
"none"
;
a.style.MozUserFocus
=
"ignore"
;
}
var
element
=
document
.all ? editor.get_document().body : editor.get_document();
$telerik.addExternalHandler(element, "blur", function (e) {
var labelUpdated;
var
editorContent
= editor.get_html(true);
if (div1.textContent == editorContent)
labelUpdated
=
false
;
else
labelUpdated
=
true
;
div1.innerHTML
=
editorContent
;
div2.style.display
=
'none'
;
div1.style.display
=
''
;
if (labelUpdated) {
//alert('Updating... ' + editorContent);
}
});
}
function div1_Click() {
div1.style.display
=
'none'
;
div2.style.display
=
''
;
var editor = $find("<%=RadEditor2.ClientID%>"); //get a reference to RadEditor client object
editor.setFocus(); //set the focus on the the editor
editor.set_html(div1.innerHTML);
}
</
script
>
</
telerik:RadCodeBlock
>
</
form
>
</
body
>
</
html
>
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test.aspx.vb" Inherits="test" %>
<!DOCTYPE html>
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
style
=
"overflow: auto"
>
<
head
runat
=
"server"
>
<
title
></
title
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
telerik:RadEditor
ID
=
"re2"
runat
=
"server"
AutoResizeHeight
=
"True"
ContentAreaMode
=
"Div"
>
<
Content
>
Some text<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
Delete this row!
<
br
/>
<
br
/>
<
br
/>
Some more text
</
Content
>
</
telerik:RadEditor
>
</
div
>
</
form
>
</
body
>
</
html
>
<
script
type
=
"text/javascript"
>
Telerik.Web.UI.RadEditor.prototype.executeCommand = function (radCommand, setFocus, addToStack)
{
//Set the editor's window
if (!radCommand.get_window())
{
radCommand.set_window(this.get_contentWindow());
}
//if (false != setFocus && !this.isOpera) this.setFocus(); //Opera has a problem! Typing is discontinued.
this._commandsManager.execute(radCommand, addToStack);
}
</
script
>
1.
function
editAppointment(sender, e) {
2.
var
apt = e.get_appointment();
3.
sender.editAppointmentWithConfirmation(apt);
4.
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test2.aspx.cs" Inherits="InsureHubWeb.Test2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
EnablePageMethods
=
"true"
runat
=
"server"
>
<
Services
>
<
asp:ServiceReference
path
=
"~/WS/wsIHExplorer.asmx"
/>
</
Services
>
</
telerik:RadScriptManager
>
<
telerik:RadSkinManager
ID
=
"RadSkinManager1"
runat
=
"server"
Skin
=
"Default"
ShowChooser
=
"false"
/>
<
telerik:RadSearchBox
ID
=
"RadSearchBox1"
runat
=
"server"
EnableAutoComplete
=
"false"
EnableViewState
=
"false"
Width
=
"500"
Label
=
"Look In:"
EmptyMessage
=
"Enter name or part of name"
>
<
SearchContext
ShowDefaultItem
=
"false"
>
<
Items
>
<
telerik:SearchContextItem
Text
=
"This Folder"
Key
=
"1"
/>
<
telerik:SearchContextItem
Text
=
"All Folders"
Key
=
"2"
/>
</
Items
>
</
SearchContext
>
</
telerik:RadSearchBox
>
</
form
>
</
body
>
</
html
>
<
ImageManager
DeletePaths
=
"~/Images/Sections"
MaxUploadFileSize
=
"1000000"
UploadPaths
=
"~/Images/Sections"
ViewPaths
=
"~/Images/Sections"
/>
Dim imagepath() As String = {"~/Images/Sections"}
If Not IsPostBack Then
RadEditor1.ImageManager.ViewPaths = imagepath
End If
/// <summary>
/// this loads the saved states of the group headers
/// (whether they were collapsed or expanded) you have to pass in the
/// grid you want to bind
/// </summary>
/// <param name="grid">the grid you want to bind</param>
public static
void
LoadGroupsExpandedState(RadGrid grid)
{
var listCollapsedIndexes = HttpContext.Current.Session[grid.ID]
as
ArrayList;
if
(listCollapsedIndexes !=
null
)
{
foreach
(GridItem item
in
grid.MasterTableView.GetItems(GridItemType.GroupHeader))
{
if
(listCollapsedIndexes.Contains(item.RowIndex))
{
item.Expanded =
false
;
}
}
}
}
//LoadGroupsExpandedState
/// <summary>
/// this function sets a session variable to remember which grouping items have been
/// collapsed or expanded
/// </summary>
/// <param name="grid"></param>
/// <param name="curItem"></param>
public
static
void
SaveGroupsExpandedState(RadGrid grid, GridItem curItem)
{
GridItem[] groupItems = grid.MasterTableView.GetItems(GridItemType.GroupHeader);
if
(groupItems.Length > 0)
{
var listCollapsedIndexes =
new
ArrayList();
//if this first one is true, then we need to add it to the list
//basically the state that is getting passed in is the old state
//so if it's expanded = true, then it was expanded, and it's
//getting collapsed
if
(curItem.Expanded)
{
listCollapsedIndexes.Add(curItem.RowIndex);
}
//if curItemExpanded
else
{
//check if it's in the list
if
(listCollapsedIndexes.Contains(curItem.RowIndex))
{
listCollapsedIndexes.Remove(curItem.RowIndex);
}
//if listCollapse
}
//else
foreach
(GridItem item
in
groupItems)
{
if
(!item.Expanded && item.RowIndex != curItem.RowIndex)
{
listCollapsedIndexes.Add(item.RowIndex);
}
}
HttpContext.Current.Session[grid.ID] = listCollapsedIndexes;
}
}
//SaveGroupsExpandedState
protected
void
RadGrid1_ItemCommand(
object
sender, GridCommandEventArgs e)
{
//get the grid
RadGrid grid = sender
as
RadGrid;
//if this is expand or collapse, save the state
if
(e.CommandName == RadGrid.ExpandCollapseCommandName)
{
TelerikHelpers.SaveGroupsExpandedState(grid, e.Item);
}
}
//ItemCommand
/// <summary>
/// This method adds logic on how to handle a databound (restore the grouping set on screen)
/// </summary>
///The parameter is not used.
///The parameter is not used.
protected
void
RadGrid1_DataBound(
object
sender, EventArgs e)
{
TelerikHelpers.LoadGroupsExpandedState(sender
as
RadGrid);
}