[JS] Probleem met CKEditor

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tim_R
  • Registratie: Oktober 2004
  • Laatst online: 16-06 16:27
Ik heb een probleempje met de CKEditor, bij het bouwen van een nieuw CMS.

Het zit als volgt: de gebruiker voert een tekst in in de CKEditor en klik op de button 'Opslaan'. Een javascript-functie wordt aangeroepen:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function submit(tabel,id){
              var naam  = 'tekst' + id;
              var tekst = 'CKEDITOR.instances.' + naam + 'getData(naam);';
              var tekst2 = tekst;
              $.ajax({
                url: 'models/wijzig.php?submit=true',
                type: 'POST',
                data: 'id=' + id + '&tekst=' + tekst2 + '&tabel=' + tabel,
                
                success: function(result) {
                    var meldingdiv = '.melding' + id;
                    var meldingstekstdiv = '.meldingstekst' + id;
                    $(meldingdiv).slideUp(function(){
                        $(meldingdiv).removeClass('mislukt').slideDown();
                        $(meldingdiv).removeClass('geslaagd').slideDown();
                        $(meldingdiv).removeClass('info').slideDown();
                        $(meldingdiv).removeClass('waarschuwing').slideDown();
                        $(meldingstekstdiv).empty();
                        $(meldingstekstdiv).append('Succesvol opgeslagen!');
                        $(meldingdiv).addClass('geslaagd').slideDown();
                    });
                }
              });
            return false;
        }


Er staan meedere editors op 1 pagina, vandaar dat de CKEditors allemaal een apart id dienen te krijgen ('tekst'+ id van het item).
Wat dus lukt op regel 3 is het genereren van de tekst die 'uitgevoerd' moet worden maar het lukt me op geen enkele manier om het ook daadwerkelijk uit te laten voeren!

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 11:55

MueR

Admin Tweakers Discord

is niet lief

Je stuurt nu gewoon een string mee. Je zult op een of andere manier de browser daadwerkelijk de referentie moeten laten evalueren als javascript.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Tim_R
  • Registratie: Oktober 2004
  • Laatst online: 16-06 16:27
MueR schreef op maandag 08 februari 2010 @ 21:49:
Je stuurt nu gewoon een string mee. Je zult op een of andere manier de browser daadwerkelijk de referentie moeten laten evalueren als javascript.
Klopt! Maar aangezien ik meestal alleen werk met jQuery en niet echt into die-hard-js ben hoopte ik dat iemand een gouden tip zou hebben over hoe.. :)

Acties:
  • 0 Henk 'm!

  • Tim_R
  • Registratie: Oktober 2004
  • Laatst online: 16-06 16:27
Ja! 'Evalueren' was het missende sleutelwoord, ik vond http://www.w3schools.com/jsref/jsref_eval.asp en dat was precies wat ik nodig had. Bedankt!

For the record nog de aangepaste code:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function submit(tabel,id){
              var naam  = 'tekst' + id;
              var tekst = 'CKEDITOR.instances.' + naam + '.getData();';
              var tekst2 = eval(tekst);
              $.ajax({
                url: 'models/wijzig.php?submit=true',
                type: 'POST',
                data: 'id=' + id + '&tekst=' + tekst2 + '&tabel=' + tabel,
                
                success: function(result) {
                    var meldingdiv = '.melding' + id;
                    var meldingstekstdiv = '.meldingstekst' + id;
                    $(meldingdiv).slideUp(function(){
                        $(meldingdiv).removeClass('mislukt').slideDown();
                        $(meldingdiv).removeClass('geslaagd').slideDown();
                        $(meldingdiv).removeClass('info').slideDown();
                        $(meldingdiv).removeClass('waarschuwing').slideDown();
                        $(meldingstekstdiv).empty();
                        $(meldingstekstdiv).append('Succesvol opgeslagen!');
                        $(meldingdiv).addClass('geslaagd').slideDown();
                    });
                }
              });
            return false;
        }

Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 27-08 14:18

pieturp

gaffa!

Bah! eval === evil! :X

Doe alsjeblieft het volgende:
JavaScript:
1
var tekst = CKEDITOR.instances[naam].getData();


Overigens, jQuery ondersteund het chainen van methods

... en etcetera en zo


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 11:55

MueR

Admin Tweakers Discord

is niet lief

^^ die is beter inderdaad

Ik ben niet echt helder aan het denken vandaag :s

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Tim_R
  • Registratie: Oktober 2004
  • Laatst online: 16-06 16:27
Okee, bedankt! Die werkt ook en dat lijkt me inderdaad netter dan eval(). De gelijkenis met 'evil' zal wel niet voor niets zijn dan.. ;)

Edit: Dat chainen klopt, dat heb ik inmiddels ook gedaan. Tijdens het ontwikkelen heb ik voor de overzichtelijkheid tijdens het debuggen even alles op aparte regels geplaatst. Thanks voor de tip though!

[ Voor 43% gewijzigd door Tim_R op 09-02-2010 22:29 ]


Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 27-08 14:18

pieturp

gaffa!

NP :)

Overigens kun je ook prima leesbaar chainen, als je maar netjes inspringt:
JavaScript:
1
2
3
4
5
6
$(selector)
   .method(arg)
   .method(function(){
      //
   })
   .nogEenMethod(arg);


Vergeet alleen de ; en . niet een consequente plek te geven. Ik zet de punt vooraan, maar dat hoeft niet natuurlijk ;)

... en etcetera en zo

Pagina: 1