2010-03-30 13 views
7

Dodałem instancji CKEditor programowo na mojej stronie w opóźnieniem kodu mojej strony ASP.NET:Jak programowo określić nazwę CKEditor przykład

VB.NET:

itemEditor = New CkEditor 
cell.Controls.Add(itemEditor) 

. .. który działa dobrze. Mogę pobrać kod HTML na poczcie zwrotnej i zrobić z tym coś.

Jednak chcę również wykonać pewne czynności po stronie klienta, w szczególności wybrać wybrany element z innej kontrolki i wstawić go do tekstu, wykonując zdarzenie onchange.

Tak, jak mogę uzyskać nazwę instancji edytora w JavaScripcie, dzięki czemu można zrobić rzeczy jak:

function GetCkText() 
{ 
    var htmlFromEditor = CKEDITOR.instances['editorName'].getData(); 
    // do stuff with htmlFromEditor 
} 

Odpowiedz

16

Zakładając, masz tylko jedną instancję edytora:

for (var i in CKEDITOR.instances){ 
    var currentInstance = i; 
    break; 
} 
var oEditor = CKEDITOR.instances[currentInstance]; 

Oto co mówi o JavaScript API instances.

Oto inny sposób definiowania CKEditor. Oto FCK 'jest wejście pól ID:

CKEDITOR.replace('fck', { 
    customConfig : prefix + 'js/ckeditor/config.js', 
    height: 600, 
    width: 950 
}); 

editor = CKEDITOR.instances.fck; 

Wskazówki jak jestem wtedy w stanie odwołać się do instancji za pomocą .fck.

+0

Dzięki, działa dobrze - o wiele mniej. Jednak, jeśli mogę, pytanie. Ponieważ większość mojej pracy to serwer .NET (i zrobiłem bardzo mało JS), jestem przyzwyczajony do instancji kolekcji będących kolekcją samych obiektów ... podczas gdy "i" w twoim przykładzie tutaj jest instancją edytora Nazwa. Skąd mam to wiedzieć - czy ta składnia może sugerować domyślną właściwość? – ChrisA

+0

Jeśli wiesz, że jest prosta, wartość currentInstance jest identyfikatorem HTML twojego edytora textarea. Przykład "currentInstance =" editor1''. –

+0

Czy istnieje sposób przypisania nazwy wystąpienia? ... ... próbowałem 'CKEDITOR.appendTo (" my_div ", {imię:" my_editor "}, my_string)' – dsdsdsdsd

0

Dobrze znalazłem sposób ... ale nie wiem jak to dużo ...

Dodałem kontrolę ukryte pole do strony, po dodaniu edytora i umieścić redakcji ClientID jego wartości:

Dim hdn As New HiddenField 
With hdn 
    .ID = "HiddenField" 
    .Value = itemEditor.ClientID 
End With 
cell.Controls.Add(hdn) 

.. a następnie w JavaScripcie Mogę zdobyć ukrytą ziemię d, a zatem nazwa edytora:

function GetCkText() 
{ 
    var hdn = document.getElementById("HiddenField"); 
    var editorName = hdn.getAttribute("value"); 
    var editor = CKEDITOR.instances[editorName]; 
    alert(editor.getData()); 
    return false; 
} 

Ale to trochę nieeleganckie, delikatnie mówiąc. Ktoś ma lepszy sposób?

1

Poniższy kod:

var allInstances=CKEDITOR.instances; 
for (var i in allInstances){ 
    alert(allInstances[i].name); 
} 

działa dobrze dla mnie.

0

Jeśli używasz CKEDITOR.appendTo(...), pamiętaj, że cededytor tworzy wewnętrzną nazwę instancji. Możesz więc zapytać o tę nazwę natychmiast po jej utworzeniu, a następnie przechowywać gdzieś i używać później.

var lvo_editor = CKEDITOR.appendTo("my_div" , null , lvs_html) ; 
my_global_var = lvo_editor.name         ; 

przy okazji: Metoda CKEDITOR.replace(...) pozwala zdefiniować nazwę instancji (patrz odpowiedź wyżej)

0

Jeśli potrzebujesz przykład z wtyczki, przynajmniej w wersji 4+ można zrobić to.

CKEDITOR.currentInstance 

Tutaj chcę znać nazwę textarea, na który aplikowałem cedenta.

CKEDITOR.currentInstance.name 
1

Jeśli masz tylko jedno wystąpienie i nie znasz jego nazwy.

CKEDITOR.instances[Object.keys(CKEDITOR.instances)[0]].getData() 
Powiązane problemy