CKEditor getData() met dynamische instance name

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • digital-IMEI
  • Registratie: December 2005
  • Laatst online: 05-09 07:53
hi!

Ik zit met een uitdaging waarbij ik (blijkbaar) onvoldoende JS kennis voor heb en het internet me niet veel verder wil hebben.

Situatie:
Een gedeelte van een webpagina bevat een standaard html formulier inclusief een WYSIWYG editor. Omdat er meerdere formulieren kunnen voorkomen binnen diezelfde pagina worden deze dynamisch voorzien van een naam (editor0, editor1 enz...)
In plaats van deze formulieren via een reguliere POST te versturen, doe ik dit met jQuery load(). Met behulp van het onderstaande stukje code verzamel ik alle input en stuur ik deze mee als post.
JavaScript:
1
2
3
4
5
6
7
8
9
function post_vars(formid) {
    var vars = new Object();
    var form = document.getElementById(formid).elements;
        for(i=0;i<form.length;i++){
            if(form[i].checked != false && form[i].type == 'radio'){eval("vars."+form[i].name+"='"+(form[i].value)+"'");}
            if(!(/editor([0-9])/.test(form[i].name) && form[i].name != 'editor' && form[i].type != 'radio'){eval("vars."+form[i].name+"='"+escape(form[i].value)+"'");}
        }
    return vars;    
}

Nu is het probleem dat ik niet weet hoe ik dynamisch een CKEditor instance kan aanroepen, nu kan ik wel twintig regels ala dit maken:
JavaScript:
1
if('editor' == form[i].name){vars.editor = CKEDITOR.instances.editor.getData();}

maar dit verdient nu niet bepaald de schoonheidsprijs...
Iets verder ben ik hierop terecht gekomen:
JavaScript:
1
2
3
4
if(/editor([0-9])/.test(form[i].name)){
    var editorname = form[i].name;
    vars.editor = CKEDITOR.instances.editorname.getData();
}

Helaas mag dit ook niet werken... Na een 2-daagse zoektochtmarathon hoop ik dat iemand mij nu toch echt een klein schopje in de juiste richting kan geven. :*)

Acties:
  • 0 Henk 'm!

  • digital-IMEI
  • Registratie: December 2005
  • Laatst online: 05-09 07:53
Can I kick it? :9

Acties:
  • 0 Henk 'm!

  • bartbh
  • Registratie: Maart 2004
  • Niet online
Als je toch al jQuery gebruikt, kun je de formulieren/velden toch ook een class geven op basis van deze class de CKEeditor erop los laten?

Acties:
  • 0 Henk 'm!

  • digital-IMEI
  • Registratie: December 2005
  • Laatst online: 05-09 07:53
Het heeft even geduurd maar ik heb de oplossing gevonden. Door niet CKEDITOR.instances.editor.getData(); te gebruiken maar CKEDITOR.instances.['editor'].getData(); is het uiteindelijke gelukt.

werkende code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function post_vars(formid) {
    var vars = new Object();
    var form = document.getElementById(formid).elements;
        for(i=0;i<form.length;i++){
            if(/editor([0-9])|editor/.test(form[i].name)){ 
                var editorname = form[i].name; 
                vars.editor = CKEDITOR.instances[editorname].getData(); 
            }
            if(!/editor([0-9])|editor/.test(form[i].name) && form[i].type != 'radio'){eval("vars."+form[i].name+"='"+escape(form[i].value)+"'");}
            if(form[i].checked != false && form[i].type == 'radio'){eval("vars."+form[i].name+"='"+ (form[i].value)+"'");}
        }
    return vars;
}


Hiermee wordt er vanuit gegaan dat alle input velden met de name editor en editorX (X=1 cijfer) CKEditor input is.

[ Voor 0% gewijzigd door digital-IMEI op 15-01-2012 21:35 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Het is eigenlijk basis javascript:
JavaScript:
1
collection.item = 1;

is equivalent aan:
JavaScript:
1
collection["item"] = 1;

Zo werkt javascript gewoon, voor ALLE objecten.

日本!🎌