mehrdimensionale arrays unter NS 7 & Mozilla

hyppolit_krispin

Grünschnabel
hallo zusammen,

habe folgendes problem:

ich kann meinem array[1] keinen wert über eine variable zuweisen ?
unter IE klappt das supi und der script läuft ohne probleme.

ich kann nur innerhalb der "xmldoc.onload=function()" mit alert() den "allItems"-Wert ausgeben lassen (unter ns) - aber nicht global
wer kann mir bitte helfen ?

grüße hyppolit :)

Code:
var xmldoc;
var text = new Array();
var newsItems="";
var allItems="";

var v_content = new Array();

v_content[0] = new Array(3);
v_content[0][0] = "";
v_content[0][1] = "Wir gratulieren allen Prüflingen zur bestandenen Prüfung";
v_content[0][2] = "_blank";

v_content[1] = new Array(3);
v_content[1][0] = "";
v_content[1][1] = "";
v_content[1][2] = "_blank";

//*****************************
// ACTIONSKRIPT FÜR DAS XML


// for DOM2 including NN 6 & 7 & Mozilla
if (document.implementation && document.implementation.createDocument)
{
	xmldoc = document.implementation.createDocument("", "", null);
	xmldoc.onload=function(){
			newsItems = xmldoc.getElementsByTagName('newselement');
			for (var i=0;i<newsItems.length;i++){
				text[i]=newsItems[i].getElementsByTagName("name")[0].childNodes[0].data;
				allItems = allItems+text[i]+"<br>";
				}
				v_content[1].splice(1,1,allItems);
	}
}
// INTERNET EXPLORER
else if (window.ActiveXObject)
{	
    xmldoc=new ActiveXObject("Microsoft.XMLDOM");
	xmldoc.async = false;
	xmldoc.onreadystatechange=function(){
		if(xmldoc.readyState == 4){//read_ticker();}
			newsItems = xmldoc.getElementsByTagName('newselement');
			for (var i=0;i<newsItems.length;i++){
				text[i]=newsItems[i].getElementsByTagName("name")[0].childNodes[0].data;
				allItems = allItems+text[i]+"<br>";
				}
			v_content[1][1]=allItems;
			}
		}
	xmldoc.load('news.xml');
}
else
// NETSCAPE 4.7 UND ANDERER SCHROTT
{
	v_content=[['','Ihr Browser unterstützt diese Funktionalität leider nicht','_blank']];
}
 
Zuletzt bearbeitet:
Mmmmh....nimm mal das var vor deinen Variablen weg...

Ansonsten wäre es gut, wenn du den Rest dazu auch mal Posten könntest(oder ranhängen)....damit man das live testen kann.

Gibt Mozilla einen Javascript-Fehler aus?
 
@ fatalus
hier der gesamte code & link: ticker.html
mozilla & NS spucken keinen fehlercode aus.
unter IE kein prob - aber bei den anderen beiden kommt nur der inhalt vom 1.array und der 2. bleibt leer, da der inhalt von array[1][1] keinen inhalt zugewiesen bekommt :(
habe auch den ratschlag befolgt und das var vor der array-def weggenommen - ohne erfolg

newsticker.js

Code:
v_font='verdana,arial,sans-serif';
v_fontSize='10px';
v_fontSizeNS4='11px';
v_fontWeight='normal';
v_fontColor='#4A49A8';
v_textDecoration='none';
v_fontColorHover='#ff0000';
v_textDecorationHover='underline';
v_bgColor='#cccccc';


v_top=0;
v_left=0;
v_width=200;
v_height=75;
v_paddingTop=2;
v_paddingLeft=2;
v_position='relative';
v_timeout=0;
v_slideSpeed=10;
v_slideDirection=0;
v_pauseOnMouseOver=false;
v_slideStep=1;
v_textAlign='left';
v_textVAlign='middle';

var xmldoc;
var text = new Array();
var newsItems="";
var allItems="";

v_content = new Array();

v_content[0] = new Array(3);
v_content[0][0] = "";
v_content[0][1] = "Wir gratulieren allen Prüflingen zur bestandenen Prüfung";
v_content[0][2] = "_blank";

v_content[1] = new Array(3);
v_content[1][0] = "";
v_content[1][1] = "";
v_content[1][2] = "_blank";

//*****************************
// ACTIONSKRIPT FÜR DAS XML


// for DOM2 including NN 6 & 7 & Mozilla
if (document.implementation && document.implementation.createDocument)
{
	xmldoc = document.implementation.createDocument("", "", null);
	xmldoc.onload=function(){
			newsItems = xmldoc.getElementsByTagName('newselement');
			for (var i=0;i<newsItems.length;i++){
				text[i]=newsItems[i].getElementsByTagName("name")[0].childNodes[0].data;
				allItems = allItems+text[i]+"<br>";
				}
				v_content[1].splice(1,1,allItems);
	}
}
// INTERNET EXPLORER
else if (window.ActiveXObject)
{	
    xmldoc=new ActiveXObject("Microsoft.XMLDOM");
	xmldoc.async = false;
	xmldoc.onreadystatechange=function(){
		if(xmldoc.readyState == 4){//read_ticker();}
			newsItems = xmldoc.getElementsByTagName('newselement');
			for (var i=0;i<newsItems.length;i++){
				text[i]=newsItems[i].getElementsByTagName("name")[0].childNodes[0].data;
				allItems = allItems+text[i]+"<br>";
				}
			v_content[1][1]=allItems;
			}
		}
	xmldoc.load('news.xml');
}
else
// NETSCAPE 4.7 UND ANDERER SCHROTT
{
	v_content=[['','Ihr Browser unterstützt diese Funktionalität leider nicht','_blank']];
}

//*****************************
// ACTIONSKRIPT FÜR DEN TICKER

v_ua=navigator.userAgent;
v_nS4=document.layers:0;
v_iE=document.all&&!window.innerWidth&&v_ua.indexOf("MSIE")!=-1:0;
v_oP=v_ua.indexOf("Opera")!=-1&&document.clear:0;
v_oP7=v_oP&&document.appendChild:0;
v_oP4=v_ua.indexOf("Opera")!=-1&&!document.clear;
v_kN=v_ua.indexOf("Konqueror")!=-1&&parseFloat(v_ua.substring(v_ua.indexOf("Konqueror/")+10))<3.1:0;
v_count=v_content.length;
v_cur=1;
v_cl=0;
v_d=v_slideDirection?-1:1;
v_TIM=0;
v_fontSize2=v_nS4&&navigator.platform.toLowerCase().indexOf("win")!=-1?v_fontSizeNS4:v_fontSize;v_canPause=0;

function v_getOS(a){
	return v_iE?document.all[a].style:v_nS4?document.layers["v_container"].document.layers[a]:document.getElementById(a).style;
	}
	
function v_start(){
	var o,px;
	o=v_getOS("v_1");
	px=v_oP&&!v_oP7||v_nS4?0:"px";
	if(parseInt(o.top)==v_paddingTop){
		v_canPause=1;
		if(v_count>1)v_TIM=setTimeout("v_canPause=0;v_slide()",v_timeout);
		return;
		}
	
	o.top=(parseInt(o.top)-v_slideStep*v_d)*v_d>v_paddingTop*v_d?parseInt(o.top)-v_slideStep*v_d+px:v_paddingTop+px;
	if(v_oP&&o.visibility.toLowerCase()!="visible")o.visibility="visible";
	setTimeout("v_start()",v_slideSpeed)};
	
	function v_slide(){
		var o,o2,px;
		o=v_getOS("v_"+v_cur);
		o2=v_getOS("v_"+(v_cur<v_count?v_cur+1:1));
		px=v_oP&&!v_oP7||v_nS4?0:"px";
		if(parseInt(o2.top)==v_paddingTop){
			if(v_oP)o.visibility="hidden";
			o.top=v_height*v_d+px;
			v_cur=v_cur<v_count?v_cur+1:1;
			v_canPause=1;
			v_TIM=setTimeout("v_canPause=0;v_slide()",v_timeout);
			return;
			}
		if(v_oP&&o2.visibility.toLowerCase()!="visible")o2.visibility="visible";
		if((parseInt(o2.top)-v_slideStep*v_d)*v_d>v_paddingTop*v_d){
			o.top=parseInt(o.top)-v_slideStep*v_d+px;
			o2.top=parseInt(o2.top)-v_slideStep*v_d+px;
			}
			else{
			o.top=-v_height*v_d+px;
			o2.top=v_paddingTop+px;
			}
		setTimeout("v_slide()",v_slideSpeed)};
		if(v_nS4||v_iE||v_oP||document.getElementById&&!v_kN&&!v_oP4){
			document.write("<style>.vnewsticker,a.vnewsticker{font-family:"+v_font+";font-size:"+v_fontSize2+";color:"+v_fontColor+";text-decoration:"+v_textDecoration+";font-weight:"+v_fontWeight+"}a.vnewsticker:hover{font-family:"+v_font+";font-size:"+v_fontSize2+";color:"+v_fontColorHover+";text-decoration:"+v_textDecorationHover+"}</style>");v_temp="<div "+(v_nS4?"name":"id")+"=v_container style='position:"+v_position+";top:"+v_top+"px;left:"+v_left+"px;width:"+v_width+"px;height:"+v_height+"px;background:"+v_bgColor+";layer-background"+(v_bgColor.indexOf("url(")==0?"-image":"-color")+":"+v_bgColor+";clip:rect(0,"+v_width+","+v_height+",0);overflow:hidden'>"+(v_iE?"<div style='position:absolute;top:0px;left:0px;width:100%;height:100%;clip:rect(0,"+v_width+","+v_height+",0)'>":"");
			for(v_i=0;v_i<v_count;v_i++)
				v_temp+="<div "+(v_nS4?"name":"id")+"=v_"+(v_i+1)+" style='position:absolute;top:"+(v_height*v_d)+"px;left:"+v_paddingLeft+"px;width:"+(v_width-v_paddingLeft*2)+"px;height:"+(v_height-v_paddingTop*2)+"px;clip:rect(0,"+(v_width-v_paddingLeft*2)+","+(v_height-v_paddingTop*2)+",0);overflow:hidden"+(v_oP?";visibility:hidden":"")+";text-align:"+v_textAlign+"' class=vnewsticker>"+(!v_nS4?"<table width="+(v_width-v_paddingLeft*2)+" height="+(v_height-v_paddingTop*2)+" cellpadding=0 cellspacing=0 border=0><tr><td width="+(v_width-v_paddingLeft*2)+" height="+(v_height-v_paddingTop*2)+" align="+v_textAlign+" valign="+v_textVAlign+" class=vnewsticker>":"")+(v_content[v_i][0]!=""?"<a href='"+v_content[v_i][0]+"' target='"+v_content[v_i][2]+"' class=vnewsticker"+(v_pauseOnMouseOver?" onmouseover='if(v_canPause&&v_count>1){clearTimeout(v_TIM);v_cl=1}' onmouseout='if(v_canPause&&v_count>1&&v_cl)v_TIM=setTimeout(\"v_canPause=0;v_slide();v_cl=0\","+v_timeout+")'":"")+">":"<span"+(v_pauseOnMouseOver?" onmouseover='if(v_canPause&&v_count>1){clearTimeout(v_TIM);v_cl=1}' onmouseout='if(v_canPause&&v_count>1&&v_cl)v_TIM=setTimeout(\"v_canPause=0;v_slide();v_cl=0\","+v_timeout+")'":"")+">")+v_content[v_i][1]+(v_content[v_i][0]!=""?"</a>":"</span>")+(!v_nS4?"</td></tr></table>":"")+"</div>";v_temp+=(v_iE?"</div>":"")+"</div>";
				document.write(v_temp);
				setTimeout("v_start()",1000);
				if(v_nS4)onresize=function(){
					location.reload();
					}
			}

news.xml

Code:
<newsticker>
    <newselement>
		<name>Steffen</name>
    </newselement>
    <newselement>
		<name>Torsten</name>
    </newselement>
    <newselement>
		<name>Jan</name>
    </newselement>
    <newselement>
		<name>Horst</name>
    </newselement>
    <newselement>
		<name>Hubert</name>
    </newselement>
    <newselement>
		<name>Franz</name>
    </newselement>
    <newselement>
		<name>Oswald</name>
    </newselement>
</newsticker>
 
Zuletzt bearbeitet:
Das eine Problem ist, dass du das XML-Dokument überhaupt nicht laden tust....die load()-Anweisung steht im IE-Abzweig.

Das andere....wenn das Ganze per write() ins Dokument geschrieben wird, muss dass XML-File noch nicht gezwungenermassen geladen und v_content[1][1] gefüllt sein.
Wenn v_content[1][1] erst später gefüllt wird, wirkt sich dass nicht mehr auf den Ticker aus.

Du könntest den Teil, der den Ticker in die Seite schreibt, in eine Funktion verpacken, und diese Funktion solange aufrufen, bis das XML-File geladen ist und v_content[1][1] nicht mehr leer ist.
Da kannst du dann zwar nicht mehr mit write() arbeiten....mit innerHTML sollte es aber auch zu machen sein.
 

Neue Beiträge

Zurück