Toon posts:

probleem met CMS: document.body.innerText

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een CMS met een editable document. De data komt uit een database. Ik ben niet erg sterk met deze techniek dus misschien is het programmeerwerk wat knullig, maar dit is wat ik heb gemaakt.

Omdat ik niet weet hoe ik vanuit een MySQL database rechtstreeks naar de innerText van het document kan schrijven heb ik het op de volgende manier opgelost:

1. Data wordt vanuit database als hidden formattribuut geschreven, nog voor de body tag.
HTML:
1
2
3
<form name="initForm">
   <input type="hidden" name="loadText" value="<?print $tekst;?>">
</form>

2. Vervolgens wordt loadText weer uitgelezen door de functie load()
HTML:
1
<body onload="Init(), iView.focus(), load();" bgcolor="buttonface">

JavaScript:
1
2
3
4
5
function load(){
   tekst = initForm.loadText.value;
   alert(tekst);
   iView.document.body.innerText = tekst;
}

load() schrijft de tekst naar de innerText. Op zich werkt dit perfect, de tekst komt op het scherm in het document. Voor een controle had ik de alert(tekst); in de load functie staan, maar als ik die nu weghaal krijg ik de volgende foutmelding, linksonderin de explorer (geel bordje):

Fout: iView.document.body is leeg of geen object.

Misschien ten overvloede: De code werkt perfect, wanneer de alert erin staat.

Alvast bedankt voor de hulp...

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
misschien moet je mini-delay invoeren, zodat de body "gerendered" is in het document. Waarom gooi je overigens niet gewoon $tekst in de body zelf?

Oeie,
ik lees net opnieuw en je zet de input voor de body?

  • software
  • Registratie: Mei 2003
  • Laatst online: 02-01 09:26
<input type="hidden" name="loadText" value="<?print $tekst;?>">
Moet er hier geen id ="loadText" bij staan ?

Bij divs en firefox moet dat er bij staan Grote kans dat het nu werkt

Verwijderd

Topicstarter
moozzuzz schreef op dinsdag 19 december 2006 @ 22:24:
misschien moet je mini-delay invoeren, zodat de body "gerendered" is in het document. Waarom gooi je overigens niet gewoon $tekst in de body zelf?

Oeie,
ik lees net opnieuw en je zet de input voor de body?
Dankzij een setTimeout werkt het ook, bedankt voor de tip. Kennelijk is het document nog niet geladen op het moment dat de iView.document.body.innerText = tekst gegeven wordt.

Ik zet overigens de input voor voor de body, omdat de body onload de tekst nodig heeft voor functie load(). Lekker smerig programmeren, maar IE slikt het :P .

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
En dit werkt niet?
HTML:
1
2
3
<body onload="Init(), iView.focus();" bgcolor="buttonface">
<?print $tekst;?>
</body>

Verwijderd

Topicstarter
Nee, ik werk met een document in designMode. Daarom moet de tekst ook worden weggeschreven naar de innerText property van dat document. Zoals ik al zei weet ik er nog niet zo heel veel van, maar je kan dus niet zomaar de tekst in de HTML printen. Er zullen best makkelijkere/elegantere manieren zijn om dit alles voor elkaar te krijgen, maar dankzij jouw tip loopt het ook.

  • Blaise
  • Registratie: Juni 2001
  • Niet online
IE slikt het omdat "innerText" alleen door IE wordt ondersteund. De standaard is "textContent", maar dat snapt IE weer niet. Je kan ook innerHTML gebruiken (snappen alle DOM browsers) of een nodeValue aanpassen / maken.

[ Voor 7% gewijzigd door Blaise op 20-12-2006 01:02 ]

Pagina: 1