mmofacts.com

Javascript Problemthread

gepostet vor 18 Jahre, 6 Monate von Klaus
Ich möchte nun eine einfache Fensterklasse basteln, aber leider treibt mich JS in den Wahnsinn.
function Cwindow(sTitle, iheight, iwidth, sId)

{
if($(sId))
{
Effect.Highlight(sId,
{
startcolor: '#000000',
endcolor: '#000000',
restorecolor: '#000000'
});
} else { ...
Das Beispiel sollte annäherend klar sein. Falls eine vorgebene CSSID mitgeliefert wird und diese bereits existiert, soll nur das alte Fenster hervorgehoben werden.
Doch wenn diese Aktion ausgeführt werden soll gibt es sofort einen Fehler bei Prototype an oberster Stelle:
var Class = {

create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}
this.initialze has no properties. Mit diesem Fehler kann ich leider gar nix anfangen und ich vermute es liegt auch nicht ein Fehler an Prototype sondern das irgendetwas allergisch reagiert.
Aber eigentlich müsste das doch funktionieren, kann mir jemand sagen warum JS da kapituliert?
Ich vermisse schon die alten Zeiten wo ich nur in PHP programmiert habe.
gepostet vor 18 Jahre, 6 Monate von knalli
Jo, das hast du ein paar Syntaxfehler drin.. schreib das am Besten mal hübsch eingerückt, dann wird dir mindestens eine geschweiste Klammer geschlosse fehlen.
Firefox' Firebug kann ich da nur empfehlen..
gepostet vor 18 Jahre, 6 Monate von Klaus
Original von knalli
Jo, das hast du ein paar Syntaxfehler drin.. schreib das am Besten mal hübsch eingerückt, dann wird dir mindestens eine geschweiste Klammer geschlosse fehlen.

*ups* Da hab ich doch den Quote-Tag mit den Code-Tag verwechselt. Der Code geht danach natürlich noch weiter, aber was ist noch falsch an der Syntax? Ich hab darüber hinaus noch die gleichen Probleme mit dem Effect.MoveBy() von Script.kirchen.dingens.
Original von knalli

Firefox' Firebug kann ich da nur empfehlen..
Danke für den Tipp, werd ich gleich mal ausprobieren.
gepostet vor 18 Jahre, 6 Monate von knalli
Wenn du mir URL sagst.. so aus *dem* Kontext sehe ich nichts (nach der Verbesserung *g*).
gepostet vor 18 Jahre, 6 Monate von Klaus
nichts für ungut, aber statt einer Klasse habe ich nun ein Literal-Objekt mir Klassenfunktion verwendet, dazu noch ein "new" vor das Effekt und schon gehts wieder.
Ich könnte mir so in den Allerwertesten beißen, JS ist eine Kniffelsprache.
gepostet vor 18 Jahre, 6 Monate von Klaus
Langsam wird es peinlich und auch nervig das ich Stunden an ***** Problemen mit JS zu kämpfen habe. Diesmal geht es um eine handeslübliche For-Schleife, die auch völlig korrekt ausgeführt wird, d.h. der Mapstring wird gefüllt, was man auch mit alert abfragen kann.
Das nach der Schleife wird aber gar nicht mehr aufgerufen, also egal was da steht, ob alert oder sonstiges, es wird nicht bearbeitet! Dann darf doch nicht wahr sein oder kenne ich eine Macke von JS noch nicht?
		var mapString = '';

for(i=0,ilength=tiles.length; i<=ilength; i++)
{
var x = tiles.x;
var y = tiles.y;
var left = x*map.tileSizeX/2 + y*map.tileSizeX/2;
var top = x*map.tileSizeY/2 - y*map.tileSizeY/2;
mapString += '
'width:'+map.tileSizeX+'px; height:'+map.tileSizeY+'px; -moz-user-select:none;">' +
'';
}
alert(mapString);
$('map').innerHTML = mapString;
gepostet vor 18 Jahre, 6 Monate von knalli
1. length ist eine Variable, warum dann eine Initialisierung in der Forschleife? Bei einer Methode würde das Sinn machen.. aber hier nicht.

var mapString = '';
for(i=0,ilength=tiles.length; i<=ilength; i++)
{
var x = tiles.x;
var y = tiles.y;
var _left = x*map.tileSizeX/2 + y*map.tileSizeX/2;
var _top = x*map.tileSizeY/2 - y*map.tileSizeY/2;

mapString += '
+ _left
+ 'px; top:'
+ _top
+ 'px; '
+ 'width:'
+ map.tileSizeX
+ 'px; height:'
+ map.tileSizeY
+ 'px; -moz-user-select:none;">'
+ '
+x
+'|'
+y
+')" />';
}
alert(mapString);
$('map').innerHTML = mapString;
2. Top ist reserviert.. ich würde also einfach mal auf das übliche Problem "Schlüsselwörter" tippen..
PS: Die Anordnung habe ich nur gemacht, um Syntaxfehler zu finden; ein Highlighteditor zeigt einem zudem Schlüsselwörter (hier top) an..
gepostet vor 18 Jahre, 6 Monate von Klaus
So einfach ist es diesmal nicht, denn die Variablen kann man nennen wie man will, es ändert nichts an dem Problem. Der Inhalt der Variablen ist ja auch korrekt und wird in den Mapstring eingebunden. Darüber hinaus tauchen keine Fehler bei meinen drei Testbrowsern auf.
Ich werde mal versuchen ob ich in der Schleife eine Abfrage zum laufen kriegt, die dann nur beim letzten Schleifendurchlauf wahr ist und auch ausgeführt wird.
gepostet vor 18 Jahre, 6 Monate von Moogly
Habe keinen Fehler bei dir gefunden, aber hier mal mein Script, dass läuft, bis auf dem IE, der eine Reihe zuviel darstellt (vielleicht weiß hier jemand eine Lösung):

var klasse=new Array();
var top2=new Array();
var left2=new Array();
var overlib=new Array();
var div_overlib;
var div_top;
var div_left;
var tmp="";
for (var i=1; i < klasse.length; ++i) {
div_top=top2;
div_left=left2;
div_klasse=klasse;
div_overlib=overlib;
tmp+=""; }
document.getElementById("minimap_inner").innerHTML=tmp;

Gruß
Moo
gepostet vor 18 Jahre, 6 Monate von knalli
vllt wegen ++i
gepostet vor 18 Jahre, 6 Monate von Moogly
Leider nicht!
gepostet vor 18 Jahre, 6 Monate von Klaus
So, meinen dämlichen Fehler habe ich heute zufällig gefunden:
i<=ilength

Da läuft die Schleife natürlich über das Array hinaus, JS ist da aber sehr stur.

Auf diese Diskussion antworten