Bin ja kein Profi in JS, würde es aber mal mit Anführungsstrichen um die gesamte Funktion herum versuchen, außerdem fehlt ganz am Schluss noch ein Strichpunkt.
Anführungszeichen kennzeichnen einen String. Machst Du um die Funktionsdeklaration Anführungszeichen, hast Du keine Funktion mehr, sondern einen (hier:) nutzlosen String.
Und ein Selmikon (:-D) fehlt da nicht, denn in JavaScript muss man eine Zeile am Ende nicht mit einem Semikolon abschließen.
Naja, ok, dann ist JS meiner Meinung nach soweit sinnlos, da man z.B. bei Veränderungen am Style Strings benutzt, allerdings bei dem festlegen von onClick nicht.
Aber ohne Strichpunkt am Ende ist der Befehl doch nicht zu Ende?
Kann doch nicht sein das man das weglassen kann?
getElementsByName gibt nach meinen Erfahrungen ein Array mit den gefunden Elementen zurück.
Du kannst leider kein onclick auf ein Array legen (wäre cool, wenn er das automatisch auf alle Elemente anwenden würde). Wenn du es nur auf das erste gefunde Element anwenden willst musst du das so machen
document.getElementsByName("TextWidth")[0].onclick
Was du aber machen willst ist folgendes. Entweder weist du einem button eine anonyme Funktion zu (wie du es gemacht hast) oder du schreibst den Funktionsnamen hin, aber ohne Klammern (). Denn sonst wird die Funktion sofort ausgeführt
Das Semikolon würde ich trotzdem immer am Ende einer Anweisung machen. Man weiß ja nie. Vielleicht benutzt man ja mal irgend wann einen Compressor, der alles in eine zeile schreiben lässt
[QUOTE=Imbericle]
Aber ohne Strichpunkt am Ende ist der Befehl doch nicht zu Ende?
Kann doch nicht sein das man das weglassen kann?
[/QUOTE]
Entwedre wird der befehl durch ein ; oder durch eine neue zeile beendet. Mit dem Semikolon ist natürlich wesentlich sauberer.
Die Erfahrung mit getElementsByName hatte ich bisher nicht gemacht noch den Index angeben zu müssen wenn nur ein Objekt existiert. Es wird ja diesbezüglich kein Fehler genannt.
document.all ist Syntax für den IE 4(!) - wenn du einen so alten Browser unterstützen musst…
new Function ist auch nicht schön, da es einem eval entspricht.
Am einfachsten ist ein closure:
document.getElementsByTagName("a")[i].onmouseover = function(e) {
ShowPicture(a);
LinkAuslesen(i);
};
Wobei das so nicht funktioniert, denn i (und vermutlich auch a) sind andere Werte, als du erwartest.
Aber was macht LinkAuslesen()? Eventuell ist es hier sinnvoller mit this zu arbeiten.
danke this funktioniert bei LinkAuslesen() mit anstatt document.getElementsByTagName(„a“)[index].href einfach nur der Parameter Link mit this übergeben.
Doch lautet die Funktion
function AnzeigenZuweisen()
{
var a = 0
for (var i = 0; i < document.getElementsByTagName("a").length; i++)
{
if (document.getElementsByTagName("a")[i].onmouseover != undefined)
{
document.getElementsByTagName("a")[i].onmouseover = new Function("ShowPicture(" + a + "); " + "LinkAuslesen(this)")
a=a+1
}
else
{
document.getElementsByTagName("a")[i].onmouseover = new Function("LinkAuslesen(this)")
}
if (document.getElementsByTagName("a")[i].onclick == undefined)
{
document.getElementsByTagName("a")[i].onclick = new Function("AnzeigeSperren(" + i + ")")
}
}
}
und wenn ich dann deine Variante reinsetze, dann wird als Parameter bei ShowPicture immer nur der höchste Wert übergeben.
Ja, gut erkannt, das liegt daran, dass in dem Moment wo die funktion aufgerufen wird die Schleife längst beendet ist und a den höchsten Wert hat.
Der einfachste Weg ist es dem Objekt den Wert mitzugeben, dazu wäre es sinnvoll auch den Link einer Variabel zu zuweisen:
var l = document.getElementsByTagName("a")[i];
l.a = a;
if (l.onmouseover) {
// Welchen Sinn das macht verstehe ich aber auch nicht
l.onmouseover = function(e) {
ShowPicture(this.a);
LinkAuslesen(this);
};
a++;
} else {
l.onmouseover = fucntion() { LinkAuslesen(this);};
}
danke. Ich frage mich aber was nun der Unterschied zu new Function sein soll? Ich glaube dir ja gerne das dies jetzt die bessere Variante ist. Doch für was steht bitte function(das e)?
Und der Code für LinkAuslesen() lautet jetzt:
function LinkAuslesen(Link)
{
if (parent.LinkAnzeigen == true)
{
parent.document.getElementById("Adresse").innerHTML = Link
parent.document.getElementById("Adresse").title = Link.innerHTML
}
}
Ist onmouseover schon eine Funktion zugeteilt, dann existiert dafür ein Bild und ich werde noch eine Weitere hinzufügen.
Es ist aber wohl besser den Index des Objekts in den aufgerufenen Funktionen verarbeiten zu können. Es wäre die einfachste Art und Weise hier diesen mit this als übergebenen Parameter herausbekommen um ihn in einer öffentlichen Variable speichern zu können.
Und die Zuweiseung einer Funktion (der Titel hier) funktioniert jetzt auch einwandfrei mit
Das e ist das Eventobjekt das viele Browser (nicht der IE) einem Event übergeben.
new Function() ist ähnlich wie eval(), es ist langsam und unflexibel. Wenn du mit JS programmieren willst, solltest du dich mit closures und anonymen Funktionen beschäftigen, nur so kannst du alle Möglichkeiten von JS ausnutzen.
Was ist hier parent? Und wie gesagt, du solltest Variabeln benutzen und nicht immer wieder die gleiche Funktion aufrufen, das macht den Code lesbarer.
Deine Logik bei onmouseover verstehe ich nicht, aber du wirst schon Wissen was du tust.
Wieso willst du ausgerechnet den Wert in einer Variabeln speichern? Und was willst du mit dem Index? Ohne zu Wissen, was du genau machen willst, wird es schwer dir bessere Ratschläge zu geben.
Dir scheinen die Begriffe nicht klar zu sein. Eine Variabel kommt in deinem Code (zu) selten vor, a und i sind Variabeln.
Das was du da zuweist ist eine Eigenschaft des Objekts, das du mit getElementById ermittelst. Normalerweise überprüft man auch, ob dieses wirklich Objekt existiert um im Fehlerfall reagieren zu können (schau mal in die Fehlerkonsole, dann siehst du wieviel JS Programmierer diese Grundlage ignorieren).
Diese Eigenschaft ist ein Eventhandler, der im Fall des Events die Funktion aufruft. Der Nachteil dieser Methode ist es, dass nur eine Funktion ausgeführt werden kann, daher gibt es neue Methoden dafür.
Das was dir Gilles gezeigt hat, ist die Zuweisung einer Funktionsreferenz. Das zu erklären würde zu lange dauern, deshalb hier ein paar Beispiele was das bedeutet:
mit Eventhandler müsste ich mich erst einmal mehr beschäftigen. Es reicht mir aber in der Regel onmouveover, onclick und onfocus.
Was Variablen sind ist mir klar. Stehen Klammern hinter der zugewiesenen Funktion dann sieht das für mich eher wie eine Funktion aus, bei späterem Draufsehen. Ich bräuchte den index, um ein eingeblendetes Objekt in einer anderen Situation wieder ausblenden zu können. Denn das Bild wird mit onmouseover eingeblendet und bleibt beim anklicken dieses Links so lange stehen bis entweder ein anderer Link aufgerufen wird oder man auf eine freie Stelle der Seite klickt. Die Funktion LinkAuslesen() wird aus einem iFrame heraus aufgerufen und der Inhalt wird auf der parent Seite ausgegeben. Ich halte nicht soviel von Variablen die ein Objekt zugewiesen bekommen, da dadurch Speicher in Anspruch genommen und auch jedes Mal verarbeitet wird. Und zu prüfen ob der Button dem ich eine Funktion aus dem iFrame heraus zuweisen will überhaupt existiert, brauche ich ja nicht auf einer nicht dynamisch erstellten Seite. Wäre für die Zukunft villeicht interessant. Aber excistiert das Objekt nicht, dann wird doch eh eine Fehlermeldung ausgegeben.
OK ich hab mich bei der Gestaltung umentschieden, so dass der Index des Objekts nicht mehr Notwendig ist. Hatte es auch mit einem anderen Verfahren hinbekommen, doch ist die jetzige Variante die Bessere. Und klar kann man prüfen ob ein Objekt überhaupt existiert: alert(document.getElementsByName(„sdaölf“).lengrh)
Ich hätte noch ein anderes Problem und will nicht im Forum mit mehreren hintereinander stehen.