Я программно добавил экземпляр CKEditor на свою страницу в коде программной части моей страницы ASP.NET:
VB.NET:
itemEditor = New CkEditor
cell.Controls.Add(itemEditor)
... что отлично работает. Я могу получить HTML-код в постбэке и что-то с ним делать.
Однако я также хочу сделать с ним кое-что на стороне клиента, в частности, взять выбранный элемент из другого элемента управления и вставить его в текст, обработав событие onchange
.
Итак, как мне получить имя экземпляра редактора в JavaScript, чтобы я мог делать что-то вроде:
function GetCkText()
{
var htmlFromEditor = CKEDITOR.instances['editorName'].getData();
// do stuff with htmlFromEditor
}
Предполагая, что у вас только один экземпляр редактора:
for ( var i in CKEDITOR.instances ){
var currentInstance = i;
break;
}
var oEditor = CKEDITOR.instances[currentInstance];
Вот что JavaScript API говорит о экземплярах .
Вот еще один способ определения CKEditor. Здесь 'fck' - это идентификатор поля ввода:
CKEDITOR.replace( 'fck', {
customConfig : prefix + 'js/ckeditor/config.js',
height: 600,
width: 950
});
editor = CKEDITOR.instances.fck;
Обратите внимание, как я могу ссылаться на экземпляр, используя .fck
.
Ну я нашел способ... но он мне не очень нравится...
Я добавил элемент управления Hidden Field на страницу, после добавления редактора, и поместил ClientId редактора в его значение:
Dim hdn As New HiddenField
With hdn
.ID = "HiddenField"
.Value = itemEditor.ClientID
End With
cell.Controls.Add(hdn)
... и затем в JavaScript я могу получить скрытое поле и, следовательно, имя редактора следующим образом:
function GetCkText()
{
var hdn = document.getElementById("HiddenField");
var editorName = hdn.getAttribute("value");
var editor = CKEDITOR.instances[editorName];
alert(editor.getData());
return false;
}
Но это немного неэлегантно, мягко говоря. У кого-нибудь есть способ получше?