[JS] WriteText naar layers (werkt niet bij NS4)

Pagina: 1
Acties:

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Hallo,

Voor mijn pagina gebruik ik een writeText functie om tekst naar een bepaalde layer/div te schrijven.

De functie ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function writeText(layer,text) {

    if( document.getElementById ) {
        document.getElementById( layer ).innerHTML = text;
    } else if( document.all ) {
        document.all[layer].innerHTML = text;

    } else {
        document[layer].document.open();
        document[layer].document.write( text );
        document[layer].document.close();
    }
}

Het probleem is echter dat het bij NS4.7 niet werkt! :( :?

overigens werkt wel bij IE5, IE6, MOZ

Mijn vermoeden is dat het te maken heeft met het feit dat de layer genest is, zie:
code:
1
2
3
 <div id="container">
   <div id="Personlst"></div>
 </div>

Weet iemand van jullie hoe ik het werkende kan krijgen???

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 23:32

RM-rf

1 2 3 4 5 7 6 8 9

waarschijnlijk bevind de layer zich weer in een andere layer; ns4 kent geneste layers die je dan moet aanspreken met
document.layers["parentLayer"].document.layers["childLayer"].blah()

als je dit vaak moet toepassen of dit redelijk generiek wilt maken kunnen je voor netscape een aparte getElement-functie schrijven die recursief layers doorloopt en checked of document["naam"] bestaat

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • Crysania
  • Registratie: September 2000
  • Laatst online: 08:05
die functie staat in een DHTML cursus die ik volgens mij hier nog heb liggen, zal ff een urlletje posten

http://www.bitstorm.org/edwin/cursus/dhtml.html

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
[die functie staat in een DHTML cursus die ik volgens mij hier nog heb liggen, zal ff een urlletje posten

http://www.bitstorm.org/edwin/cursus/dhtml.html
Had je mijn linkje niet gezien |:(

Die verwees er ook al naar!! En dat was nou net de functie die niet werkte voor het verwijzen naar naar een geneste layer...

Ik heb in het javascript document nog een andere functie staan wellicht kunne ze gecombineerd worden. Maar mij lukt het niet, loop me er al een hele tijd op dood te staren :?
code:
1
2
3
4
5
6
7
8
9
10
11
12
function getElement(el) {

    var tagList = new Object;

    for (var i = 1; i < arguments.length; i++) {
        tagList[arguments[i]] = true;
    }
    while ((el!=null) && (tagList[el.tagName]==null)) {
        el = el.parentElement;
    }
    return el;
}

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Op vrijdag 23 november 2001 14:53 schreef rwoudsma het volgende:
Hallo,

Voor mijn pagina gebruik ik een writeText functie om tekst naar een bepaalde layer/div te schrijven.

De functie ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function writeText(layer,text) {

    if( document.getElementById ) {
        document.getElementById( layer ).innerHTML = text;
    } else if( document.all ) {
        document.all[layer].innerHTML = text;

    } else {
        document[layer].document.open();
        document[layer].document.write( text );
        document[layer].document.close();
    }
}

Het probleem is echter dat het bij NS4.7 niet werkt! :( :?
Voor jullie informatie, ik heb het opgelost! De functie ziet er nu zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function writeText(layer,text,nestedref) {

    if( document.getElementById ) {
        document.getElementById( layer ).innerHTML = text;
    } else if( document.all ) {
        document.all[layer].innerHTML = text;

    } else {

        if (nestedref) {
            document.nestedref.document[layer].document.open();
            document.nestedref.document[layer].document.write( text );
            document.nestedref.document[layer].document.close();
        }
        else {
            document[layer].document.open();
            document[layer].document.write( text );
            document[layer].document.close();
        }
    }
}

Het stukje moet dan op de volgende manier worden aangeroepen:

writeText("LayerNaam","De te Schrijven tekst","NestLayerNaam")

Wanneer het een dubbele nesting is dan zo:

writeText("LayerNaam","De te Schrijven tekst","NestLayerNaam.document.DoubleNesting")

Ik dacht wellicht hebben jullie er wat aan!?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

lekker flexibel
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function findObj(id,d){
    for(var i=0;i<d.layers.length;i++){
        var obj=d.layers[i];
        if(obj.name==id) return obj;
        if(obj.document.layers.length>0){   
            obj=findObj(id,obj.document);
            if(obj!=null) return obj;
        }
    }   return null;
}

fucntion getObj(id){
    if(document.getElementById){return document.getElementById(id);}
    else if(document.all){return document.all[id];}
    else if(document.layers){return findObj(id,document);}
}

function writeText(id,txt){
        if(document.layers) with(getObj(id).document){write(txt);close();}
        else getObj(id).innerHTML=txt;
}

Zo.. ben je van de genestte layer-probleem af. Ok.. tis wat ingewikkelder :p

(weet niet oftie zo werkt, zal wel een foutje gemaakt hebben bij het rippen uit mn library)

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Zo.. ben je van de genestte layer-probleem af. Ok.. tis wat ingewikkelder :p
Heb hier een nog generiekere functie, samenvoeging van de bovenstaande twee functies die jij gebruikt...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function findObject(n,d) { 
var p,i,x; 

    if(!d) d=document; 

    if((p=n.indexOf("?"))>0&&parent.frames.length) {
        d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
    }

    if(!(x=d[n])&&d.all) x=d.all[n]; 

    for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];

    for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObject(n,d.layers[i].document); 

    if(!x&&document.getElementById) x=document.getElementById(n); 

return x;
}

Deze kan je gewoon aanroepen dmv:

findObject('ObjNaam').innerHTML = DeText;

of

findObject('ObjNaam').open();
findObject('ObjNaam').write(DeText);
findObject('ObjNaam').close();
(weet niet oftie zo werkt, zal wel een foutje gemaakt hebben bij het rippen uit mn library)
Zat nog een klein foutje in!? fucntion is fout, moet zijn function :)
Pagina: 1