Dynamische Zuweisung vin IDs
Susi Q.
- javascript
Hallo Alle,
ich habe eine Funktion, die dynamisch eine Liste von Elementen weitere Elemente einschließlich deren Attribute zufügt. Zu den Attributen gehört u.a. auch die ID des Elementes.
Dies funktioniert soweit auch ganz gut, mit der Ausnahme IDs.
Die IDs haben die generelle Form string+zahl und zwar nimmt die Zahl den Wert der Anzahl der aktuellen Elemente an.
Solange ich nur ein Element anfüge ist noch alles ganz prima, füge ich ein weiteres Element an, so werden alle IDs der dynamisch hinzugefügten Elemente auf den Wert der ID des letzten Elementes gesetzt.
Frage: wie kann ich den Wert der ID auf den Wert einfrieren, den die ID bei der Erzeugung des Elementes annimmt?
Hat jemand eine Idee?
Viele Grüße
Susi
Hmm, ehrlich gesagt, hab ich deine Frage nicht 100%ig verstanden. Hört sich an als hättest du einen Fehler im Skript ;-)
Vielleicht wär es gut, wenn du ein paar Code-Schnipsel hier postest oder, wenn du auf die entsprechende Seite verlinkst.
Gruss,
Christoph
...
Frage: wie kann ich den Wert der ID auf den Wert einfrieren, den die ID bei der Erzeugung des Elementes annimmt?
Hat jemand eine Idee?Viele Grüße
Susi
Hallo Pofi,
das Problem ist etwas anders gelagert, als ich zunächst vermutete. Nicht die ID macht Probleme, sondern der dynamisch eingefügte onmouseover-eventhandler. Da dieser erst später aufgerufen wird, also nicht zur Laufzeit des Scriptes, haben die in ihm enthaltenen Variablen bis dahin schon ihren Wert geändert, wenn das Script ein weiteres mal aufgerufen wurde.
D.h., ich muß mir für den eventhandler eine grundsätzlich andere Wertzuweisung überlegen.
Falls Dir dazu etwas einfallen sollte, anbei findes Du das Script:
<script type="application/x-javascript">
<![CDATA[
fenster = "undefined";
function customTabs()
{
titel = window.frames[fenster.id].document.title;
document.popupNode.label = titel;
document.title = "Customized tabset";
}
function moreTabs()
{
p = document.popupNode.parentNode;
pn = p.nextSibling;
l = parseInt(pn.lastChild.id.substr(-1));
myTab = document.createElement("tab");
newL = document.createAttribute("label");
newL.nodeValue = "my tab";
myTab.setAttributeNode(newL);
newF = document.createAttribute("flex");
newF.nodeValue = "1";
myTab.setAttributeNode(newF);
newC = document.createAttribute("context");
newC.nodeValue = "clipmenu";
myTab.setAttributeNode(newC);
newT = document.createAttribute("tooltip");
newT.nodeValue = "moretip";
myTab.setAttributeNode(newT);
newOMO = document.createAttribute("onmouseover");
newOMO.nodeValue = "fenster=document.getElementById('tab'+String(l+1));";
myTab.setAttributeNode(newOMO);
p.appendChild(myTab);
myIframe = document.createElement("iframe");
newI = document.createAttribute("id");
newI.nodeValue = 'tab'+String(l+1);
myIframe.setAttributeNode(newI);
newN = document.createAttribute("name");
newN.nodeValue = 'tab'+String(l+1);
myIframe.setAttributeNode(newN);
newS = document.createAttribute("src");
newS.nodeValue = "about:mozilla";
myIframe.setAttributeNode(newS);
pn.appendChild(myIframe);
}
]]>
</script>
Viele Grüße
Susi
Hallo Alle,
habe das Problem inzwischen selber gelöst!
Wen's interessiert:
<script type="application/x-javascript">
<![CDATA[
fenster = "undefined";
function customTabs()
{
titel = window.frames[fenster.id].document.title;
document.popupNode.label = titel;
document.title = "Customized tabset";
}
function moreTabs()
{
p = document.popupNode.parentNode;
pn = p.nextSibling;
l = parseInt(pn.lastChild.id.substr(-1));
myTab = document.createElement("tab");
newL = document.createAttribute("label");
newL.nodeValue = "my tab";
myTab.setAttributeNode(newL);
newF = document.createAttribute("flex");
newF.nodeValue = "1";
myTab.setAttributeNode(newF);
newC = document.createAttribute("context");
newC.nodeValue = "clipmenu";
myTab.setAttributeNode(newC);
newT = document.createAttribute("tooltip");
newT.nodeValue = "moretip";
myTab.setAttributeNode(newT);
newOMO = document.createAttribute("onmouseover");
newOMO.nodeValue = "fenster=document.getElementById('panels').childNodes[getPos(this)];";
myTab.setAttributeNode(newOMO);
p.appendChild(myTab);
myIframe = document.createElement("iframe");
newI = document.createAttribute("id");
newI.nodeValue = 'tab'+String(l+1);
myIframe.setAttributeNode(newI);
newN = document.createAttribute("name");
newN.nodeValue = 'tab'+String(l+1);
myIframe.setAttributeNode(newN);
newS = document.createAttribute("src");
newS.nodeValue = "about:mozilla";
myIframe.setAttributeNode(newS);
pn.appendChild(myIframe);
}
function getPos(where)
{
for(i=0; i<where.parentNode.childNodes.length; i++)
{
if(where.parentNode.childNodes[i] == where) return i;
}
}
]]>
</script>