Avatar billede mac10 Nybegynder
13. maj 2008 - 10:02 Der er 12 kommentarer og
1 løsning

FCKeditor og Javascript - Input felt eller? (Avanceret)

Hej alle

Jeg benytter FCKeditor til at rette data og skal nu have data ud gennem PHP.

Jeg starter med at indsætte min editor på siden:

<?php
$oFCKeditor = new FCKeditor('FCKeditor1') ;
$oFCKeditor->BasePath = '../fckeditor/' ;
$oFCKeditor->Value = utf8_encode($page[content]) ;
$oFCKeditor->Create() ;
?>

Når jeg skal hente data bruger jeg denne metode:

function get(obj) {
var poststr = "page=" + encodeURI( document.getElementById("page").value ) +
"&FCKeditor1=" + encodeURI( document.getElementById("FCKeditor1").value);
makePOSTRequest_edit_page('edit.php?action=complete', poststr);
document.getElementById('editForm').style.display = 'none';
}


I edit.php har jeg følgende kode:
if(isset($_GET['action'])) {

hvor den så udskriver $_POST['page']; og $_POST['FCKeditor1'];
Men den vil ikke vise noget i FCKeditor1 og begynder at blive i tvivl om det overhovedet er et input, da jeg jo bruger .value til at hente inputtet.¨

Jeg har prøvet at alert det:
alert(document.getElementById("FCKeditor1"))

Men den udskriver ikke noget. Normalt ville den jo skrive "undefined", hvis ikke den kunne finde data. Så dvs. den godt kan finde data, men ikke få det ud.

Er der nogen med yderligere erfaring med FCKeditor der kan fortælle, hvordan man via Javascript henter POST ud?
Avatar billede w13 Novice
13. maj 2008 - 10:21 #1
Hvis du kun skriver:

alert(document.getElementById("FCKeditor1"))

så _skal_ den skrive noget. Du har jo ikke .value på, så derfor bør den returnere [object], hvis den kan finde feltet. Sikker på, der ikke kommer en JS-fejl?
Avatar billede mac10 Nybegynder
13. maj 2008 - 10:34 #2
Ups glemte jeg lige. Har skrevet .value, men glemte lige da jeg skrev spørgsmålet.

Problemet er at den ikke viser nogen fejl, den udskriver bare ikke data.

Når den udskriver de andre POST felter, udskriver dem den korrekt. Jeg har brugt denne metode til hele mit script.

Det er med FCKeditoren at den ikke udskriver det. Jeg så i scriptet og med "<?php
$oFCKeditor =...." udskriver den et input felt der har name og id som "FCKeditor1" så den burde jo hente data, men det gør den bare ikke.
Avatar billede w13 Novice
13. maj 2008 - 10:35 #3
Ja, det skyldes jo at en tom alert ikke bliver vist. Får du udskrevet "test", hvis du skriver:

alert(document.getElementById("FCKeditor1").value+"test")
Avatar billede mac10 Nybegynder
13. maj 2008 - 12:17 #4
Undskyld mit langsomme svar, var lige ude af huset.

Ja, med ovenstående kode får jeg en alert med indholdet "test"
Avatar billede w13 Novice
13. maj 2008 - 12:21 #5
Hvad så med:

alert(document.getElementById("FCKeditor1").outerHTML)
Avatar billede mac10 Nybegynder
13. maj 2008 - 13:03 #6
Med outerHTML udskriver den:

<input id=FCKeditor1 style="display:none" type=hidden name=FCKeditor1>
Avatar billede w13 Novice
13. maj 2008 - 13:05 #7
Hmm. Kan jeg se et link til din side?

Problemet er vist, at man i virkeligheden ikke redigerer i det felt, men derimod i et iframe. Når man så er færdig, overføres indholdet til feltet FCKeditor1, men i dette tilfælde er det vist ikke overført endnu.
Avatar billede mac10 Nybegynder
13. maj 2008 - 13:10 #8
Jeg kører det lokalt så det kan jeg desværre ikke :S

Hmm. Men den skriver jo at den har et id til FCKeditor1, og den henter indholdet gennem ID, så det er da underligt den ikke kan hente det.

Tror du at, der er andre alternativer til at fixe det? :o
Avatar billede w13 Novice
13. maj 2008 - 13:12 #9
Der er formodentlig en funktion, som overfører indholdet til FCKeditor1, evt. noget der køres onsubmit på formen, men det skal jeg ikke kunne sige..
Avatar billede mac10 Nybegynder
13. maj 2008 - 13:15 #10
Så jeg skal måske ind og pille i FCKeditoren og finde ud af, hvordan og hvorledes?

Prøver mig lige frem - lig evt. lige et svar for jeg er da blevet klogere siden jeg startede spørgsmålet :)
Avatar billede mac10 Nybegynder
13. maj 2008 - 13:22 #11
Okay, fik mig lige googlet til svaret.

FCKeditorAPI.GetInstance('FCKeditor1').GetHTML();

Link til svar:
http://www.fckeditor.net/forums/viewtopic.php?f=6&t=9592

Så var det da heller ikke sværre :)

Men tak for assistancen w13, lav venligst et svar for din hjælp.
Avatar billede w13 Novice
13. maj 2008 - 13:32 #12
Oki :)
Avatar billede mac10 Nybegynder
13. maj 2008 - 14:14 #13
Jeg har nu kigget lidt på scriptet og der var endnu en fejl.

Når man trykker <ENTER> så laver den automatisk i FCKeditoren:

<p>&nbsp;</p>

Dette kunn den ikke læse. Så hvis du nu skrev:

"Dette er en
<ENTER>
<ENTER>
test"

Så ville den i HTML'en vise:

"Dette er en
<p>&nbsp;</p>
<p>&nbsp;</p>
test"

Og outputtet vilel kun ende med:

"Dette er en"

Jeg ved ikke hvorfor den ikke kan tage det med.

Jeg fandt dog en løsning som er optimal:

var contentOutput = FCKeditorAPI.GetInstance('FCKeditor1').GetXHTML().replace(/&nbsp;/g,' ');

Laver en variabel der bytter &nbsp; ud med " ".

Dette er ikke et almindeligt mellemrum, da det blot bliver ignoreret. For at lave dette mellemrum kan du bruge "Tegnoversigten" eller gøre følgende:
Hold <ALT> inde og tryk 0160

Den endelige funktion vil være:

function get(obj) {
var contentOutput = FCKeditorAPI.GetInstance('FCKeditorPage').GetXHTML().replace(/&nbsp;/g,' ');

var poststr = "page=" + encodeURI( document.getElementById("page").value ) +
"&FCKeditor1=" + contentOutput;
makePOSTRequest_edit_page('edit.php?action=complete', poststr);
document.getElementById('editForm').style.display = 'none';
}

Jeg er ikke en javascript haj (Er faktisk nybegynder), men det virker :)

Hvis der nogle der nu støder på samme problem som mig - så er løsningen så beskrevet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester