getElementsByName IE
Karl
- javascript
Hallo,
also ich schreibe Code mit Javascript in ein div.
z.B. <input type='text' name='test' id='testID'>
Wenn ich im IE jetzt darauf zugreifen möchte bekomme ich einen Laufzeitfehler. Das Objekt sei nicht definiert, also er findet nichts.
Im Firefox funktioniert alles tadellos.
Wenn ich aber mit dem IDTag im IE zugreife bekomme ich das Objekt zurück.
Kann mir das jemand erklären oder gibt es noch eine andere Möglichkeit auf diesen Teil zuzugreifen.
Danke und Gruß
Karl
...hab ich jetzt nicht ganz verstanden....
gehts um ByName oder um ByID?
--Morgen ist Heute schon Gestern -> Lebe den Tag
...hab ich jetzt nicht ganz verstanden....
gehts um ByName oder um ByID?
Ich möchte mit ByName zugreifen, dort hängt er sich. Aber mit ById nicht.
Gruß
Und was möchtest du ByName damit machen?
Und was möchtest du ByName damit machen?
Alle Daten die in den Feldern stehen neu berechnen.
Magst du mal den Code oder einen Link posten?
Also mal der Code:
Ich habe eine HTML-Seite mit einem Iframe:
<iframe id='tuEtwas></iframe>
Wenn man jetzt etwas in der Hauptseite ändert so wird das iframe neu geladen:
top.frames[0].location.href = "tueetwas.php";
Ich lade dann eine PHP-Seite, weil ich nicht möchte, dass die obere Seite neu geladen wird.
Dort schreiben ich dann in ein div Code:
Hauptseite
<div id='divID'></div>
Iframe
top.document.getElementById('').innerHTML = "<input type='text' value='2' name='price' />";
Das klappt wunderbar.
Das ist so eine Art Preisberechnung. Jetzt muss ich aber noch den Gesamtpreis ausrechnen:
var prices = top.document.getElementsByName('price');
if (prices.length) ------> und hier hauts ihn raus
prices ist leer.
Gruß
Hi,
top.document.getElementById('').innerHTML = "<input type='text'
sowas wuerde ich mit createElement/appendChild machen. Dann kannst Du eine id zuweisen und entsprechend darauf zugreifen.
Gruesse, Joachim
top.document.getElementById('').innerHTML = "<input type='text'
sowas wuerde ich mit createElement/appendChild machen. Dann kannst Du eine id zuweisen und entsprechend darauf zugreifen.
Das wäre zu komplex und zu langsam.
Eine ID hat er ja aber ich muss dann immer alle durchgehen.
Das ist so eine Art Preissystem. Ich füge einen Produkt dazu. Es bekommt eine ID. Wenn ich das Produkt aber wieder lösche, lösche ich einfach alles was zwischen diesem Produkt liegt.
Jetzt muss ich im IE immer jede ID durchteste, ob dort noch ein Produkt hängt. In allen andere Browsern hole ich es mir mit getElementsByName.
Ich würde es anders lösen, aber die Firma ...
Hauptsache es funktioniert jetzt und die Geschwindigkeit ist auch aktzeptable.
Gruß
Karl
Hi,
Das wäre zu komplex und zu langsam.
das ist - mit Verlaub - Bloedsinn. Warum sollten die Dom Methoden langsamer sein? Du kannst ja genausogut Namen vergeben.
Anyway - ich kann Dein Problem nicht ganz nachvollziehen. Das Folgende laeuft bei mir klaglos:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<script type="text/javascript">
function doit() {
document.getElementById("xyz").innerHTML="<input name='xy' type='text'>";
}
function rdit() {
alert(document.getElementsByName("xy")[0].value);
}
</script>
</head>
<body>
<form id="xyz">
</form>
<a href="#" onclick="doit();return false">schreiben</a><br>
<a href="#" onclick="rdit();return false">lesen</a>
</body>
</html>
Gruesse, Joachim
top.document.getElementById('').innerHTML = "<input type='text'
sowas wuerde ich mit createElement/appendChild machen. Dann kannst Du eine id zuweisen und entsprechend darauf zugreifen.
Mit createElement brauchst du keine ID mehr, da du ja das Element schon hast, der Rückgabewert dert Funktion ist das Objekt.
Da der OP nur Schematisch zeigt was er macht (es wäre auch interessant zu Wissen welcher IE), vermute ich das es ein Timing Problem gibt mit innerHTML
[object].innerHTML = 'input type="text" name="x">';
var o = document.getElementsByName('x');
Unter Umständen kann es sein, dass das Element noch nicht im document zur Verfügung steht.
Deshalb besser in etwa sowas:
var o = document.createElement('input');
o.type = 'text';
document.body.appendChild(o);
und hier ist o auf jeden Fall vorhanden. (Trotzdem sollte man dies testen).
Struppi.
var prices = top.document.getElementsByName('price');
Wie schon oben jemand sagte, gibt ByName ja ein Array zurück...
also müsste es wohl ...ByName('price')[0];
(oder welches Element du willst)
heißen.
Nils
Hallo,
Wenn ich im IE jetzt darauf zugreifen möchte bekomme ich einen Laufzeitfehler. Das Objekt sei nicht definiert, also er findet nichts.
Wie genau greifst du zu?
<glaskugel>
document.getElementsByName("test").Eigenschaft So funktioniert es nicht.
</glaskugel>
getElementsByName Richtig ist: getElementsByName("test.")[0].Eigenschaft
Mehrzahl ^
Für das erste Element mit dem Namen "Test" [1...n] für weitere.
Grüße,
Jochen
Wie genau greifst du zu?
<glaskugel>
document.getElementsByName("test").Eigenschaft So funktioniert es nicht.
</glaskugel>
Das ist mir schon klar:
var test = document.getElementsByName("test");
alert(test); -----> Jetzt ist test leer.
Gruß
Hi,
Das ist mir schon klar:
offenbar nicht, denn
var test = document.getElementsByName("test");
^^^^
alert(test); -----> Jetzt ist test leer.
nein, es enthaelt ein Array von allen Elementen des Namens "test":
test[0] ist Dein Freund - soferns nur den einen gibt.
Gruesse, Joachim
Das ist mir schon klar:
offenbar nicht, denn
Ja glaube ich schon
var test = document.getElementsByName("test");
^^^^
alert(test); -----> Jetzt ist test leer.
nein, es enthaelt ein Array von allen Elementen des Namens "test":
test[0] ist Dein Freund - soferns nur den einen gibt.
Nein tut es nicht (IE).
Auch wenn ich alert(test) mach müßte nicht undefined kommen
Grüße
Karl
Hi,
ich habe mal vor einiger zeit eine loadbar geschrieben die für alle browser funtzten.Vielleicht wärs gut wenn Du den IE eine seperate variable gibst,obwohl der vielleicht auch DOM versteht.
Hier mein beispiel aus meiner loadbar:
var NS4=false, IE=false, DOM=false;
if (document.getElementById) {
DOM=true;
}
else if (document.all) {
IE=true;
}
else if (document.layers) {
NS4=true;
}
Dann kannst Du in aller Ruhe mit if (IE)... auf diese variablen zugreifen.
weiss nicht ob Dir das hilft?
Gruss
Alain
Hallo Karl,
greif doch einfach über den Namen deines Formulars und den Namen deines Elements auf dieses zu!
document.meinFormular.price
vgl.: http://forum.de.selfhtml.org/archiv/2005/1/t99876/#m610929
Gruß Gernot
Hallo Karl,
greif doch einfach über den Namen deines Formulars und den Namen deines Elements auf dieses zu!
document.meinFormular.price
> vgl.: <http://forum.de.selfhtml.org/archiv/2005/1/t99876/#m610929>
Schon probiert, funktioniert auch nicht
Hi,
also ich schreibe Code mit Javascript in ein div.
z.B. <input type='text' name='test' id='testID'>
Wenn ich im IE jetzt darauf zugreifen möchte
Da gab's was - daß der IE Probleme mit zur Laufzeit erzeugten name-Attributen hat.
War hier erst vor ein paar Wochen diskutiert worden.
Ich find das im Moment grad nicht, muß aber im 2005-Archiv stecken.
cu,
Andreas