Next MSIE Error please
Beat
- javascript
OK
Script läuft fehlerfrei im FF.
Ich schmeisse den MSIE selten an...
Dementsprechen unterausgerüstet ist er.
Ich bekomme nur de normalen Runtime Errors.
Der MSIE 7 zeigt mir einen Error, der auf einen Fehler
in einer onload Routine hinweist.
Wenn ich diesen Fehler finde, kann ich die Folgefehler angehen.
Jetzt scanne ich aber den Text und frage mich, wo ich
etwas für MSIE unverständliches notiert haben könnte.
Zunächst einfach die Scriptabschnitte, die infrage kämen:
Mein window.onload binde ich so ein:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
if (oldonload) { oldonload(); }
func();
}
}
}
addLoadEvent(kv_init);
Die Funktion kv_init wird auch ausgeführt, was ich an der Initialisierung einiger Styles sehe.
Der Fehler tritt in dieser späteren Zeile auf:
kv.message.innerHTML = kv.entry[kv.step][0];
Die zeile an sich erscheint mir nicht falsch.
kv.message wurde ebenfalls geladen.
kv.message = document.getElementById("kvmessage");
Ich interpretiere dies so, dass kv.entry[kv.step][0] nicht exstiert.
kv.step aber wurde früher initialisiert.
Es ist also kv.entry[0][0]
verweist auf einen Array, welchen ich initialisiert habe wie folgt:
kv.entry = new Array();
//...
var e = 0;
kv.prices[e] = new Array(500,1000,2000,3000,4000,5000);
kv.entry[e] = new Array(
"<h4>.... </h4>",
50, 6, 0,
"Bis zu "+kv.prices[e][0]+kv.s,
"Bis zu "+kv.prices[e][1]+kv.s);
hier sehe ich kein Problem.
Tests mit alerts gab alles richtig aus.
mfg Beat
Hi,
Der Fehler tritt in dieser späteren Zeile auf:
welcher Fehler, und wie kommst Du auf diese Zeile?
Cheatah
Der Fehler tritt in dieser späteren Zeile auf:
welcher Fehler, und wie kommst Du auf diese Zeile?
MSIE 7 meldung
Zeile 250 zeichen 2 Unknown Runtime Error
Es ist die Zeile im Skript, das kann ich verifizieren.
Jedoch zweifle ich, dass dies die Zeile ist, welche den Fehler triggert.
Gibt es für den MSIE irgend eine Debugging Tool?
Ohne Hoffnung, das es weiter hilft.
Hier die Funktion, die die Zeile enthält:
function kv_update(){
kv.message.innerHTML = kv.entry[kv.step][0]; //<-------
kv.entry[kv.step][3] =
Math.floor(
kv.entry[kv.step][1] * kv.entry[kv.step][2] / kv.fwidth
);
kv.option.innerHTML = kv.entry[kv.step][kv.entry[kv.step][3] + 4] ;
kv.toggle.style.left=kv.entry[kv.step][1] + 'px';
}
mfg Beat
Hi,
Es ist die Zeile im Skript, das kann ich verifizieren.
auf welche Weise?
kv.message.innerHTML = kv.entry[kv.step][0]; //<-------
Ersetze die Zeile mal bitte durch
alert(kv.entry[kv.step][0]);
Cheatah
Es ist die Zeile im Skript, das kann ich verifizieren.
auf welche Weise?
Ich kann Leerzeilen einfügen, die Error-Zeilennummer wird entsprechend
mitgeführt.
kv.message.innerHTML = kv.entry[kv.step][0]; //<-------
Ersetze die Zeile mal bitte durch
alert(kv.entry[kv.step][0]);
Da steht der erwartete Wert drin
HTML Text in der Form <h4>...</h4><p>...</p>
Diese Art der Abfragen habe ich schon durchlaufen für alle beteiligten Variablen.
Setze ich aber
kv.message.innerHTML = "1";
so wird dort kein Fehler gemeldet (andere existieren noch)
mfg Beat
Für MSIE 7 User sollte mein Problem jetzt nachvollziehbar sein.
(MSIE 6 muss leider draussen bleiben, liegt am .htaccess das irgendwo noch drein funkt. Ich möchte jetzt nicht gleich ein paar 100 Spamrequests auf meine Scripte loslassen.)
http://www.elcappuccino.ch/ehome-factory/voranschlag
Ich habe noch andere Probleme:
Die Navigation erweist sich als eher zufällig benutzbar...
Grmbl...
mfg Beat
Hi,
kv.message.innerHTML = kv.entry[kv.step][0]; //<-------
Ersetze die Zeile mal bitte durch
alert(kv.entry[kv.step][0]);Da steht der erwartete Wert drin
HTML Text in der Form <h4>...</h4><p>...</p>
kv.message referenziert bei dir auf ein P-ELement.
Und da dieses weder H4 noch ein weiteres P als Nachfahren haben kann, quitiert dir der IE den Versuch, diesen HTML-String dem innerHTML des Absatzes zuzuweisen, mit einem Laufzeitfehler.
MfG ChrisB
kv.message.innerHTML = kv.entry[kv.step][0]; //<-------
Ersetze die Zeile mal bitte durch
alert(kv.entry[kv.step][0]);Da steht der erwartete Wert drin
HTML Text in der Form <h4>...</h4><p>...</p>kv.message referenziert bei dir auf ein P-ELement.
Und da dieses weder H4 noch ein weiteres P als Nachfahren haben kann, quitiert dir der IE den Versuch, diesen HTML-String dem innerHTML des Absatzes zuzuweisen, mit einem Laufzeitfehler.
1000 Dank.
Das habe ich bei der lokalen Version jetzt gleich bestätigen können.
Damit lässt sich dieser Fehler einfach bereinigen.
Bleiben noch zwei andere Fehler, die ich darstellen muss.
Jetzt wird erst mal der erste Fehler korrigiert.
mfg Beat
OK jetzt die anderen Fehler.
Beides mal ist screenX betroffen (bzw clientX)
function kv_steptogglemove(evt, c, m){
// c=controlling object, m=moving object
var r = 0; var f = kv.entry.length / kv.fwidth;
c.onmouseup = function(evt){
document.onmousemove = null;
kv_update();
kv_optcount();
}
if(evt && evt.preventDefault){ evt.preventDefault();}
// var offx = evt.clientX - m.offsetLeft;
var offx = evt.screenX - m.offsetLeft;
document.onmousemove = function(evt){
// r = evt.clientX - offx;
r = evt.screenX - offx;
//<---------Hier motzt MSIE: ScreenX is not an object.
if(r < 0 ) r = 0;
else if(r > kv.fwidth-10) r = kv.fwidth-10;
m.style.left = r + "px";
kv.step =1;//= Math.floor( r * f );
kv.message.innerHTML = kv.entry[kv.step][0]
evt.cancelBubble = true;
evt.returnValue = false;
}
}
Diese Funktion wird wie folgt gesetzt
während der Initialisierung
kv.steptoggle.onmousedown = function(evt){
kv_steptogglemove(evt, kv.steptoggle, kv.steptoggle );
return false;
}
kv.steptoggle
wurde wie folgt eingelesen:
kv.steptoggle = document.getElementById("kvtogglestep");
Und die ID liegt im HTML wie folgt vor:
<div id="kvstep"><span id="kvtogglestep"><b>|</b></span></div>
mfg Beat
Hi,
document.onmousemove = function(evt){
// r = evt.clientX - offx;
r = evt.screenX - offx;
//<---------Hier motzt MSIE: ScreenX is not an object.
Der IE übergibt das event-Objekt nicht automatisch als Parameter an die Handler-Funktion - siehe http://de.selfhtml.org/javascript/objekte/event.htm#allgemeines (Beispiel und Erklärung zur Zuweisung des Wertes an die Variable Ereignis im IE)
MfG ChrisB
Jungs
Ihr seid fantastisch...
Das Script funzt jetzt sogar im MSIE7.
Zusammenfassung:
1. MSIE übergibt das event nicht automatisch, deshalb:
if (!evt) evt = window.event
2. Auch wenns schwer fällt.
Man sollte doch die Semantik in Javascript erzeugtem Code überprüfen.
Und ists auch unsichtbar: valide muss es sein.
vielen Dank
mfg Beat