Array-index
bense
- javascript
0 Thomas Meinike0 bense
0 Joachim
Hallo zusammen!
Ich habe ein etwas spezielles Problem. Ich gebe 5 input-feldern "array-namen", also z.b. id[] um sie serverseitig verarbeiten zu können. Jetzt möchte ich bei einem Event (onchange) herausfinden, bzw. anzeigen, das wievielte Element des entsprechenden "Arrays" dies ist. Also, ob es das 3te id[]-input-feld ist oder ein anderes. Geht das irgendwie mit onchange="alert(this.???);"? Was muss ich bei den Fragezeichen schreiben?
Vielen Dank für eure Hilfe
Hallo,
Ich habe ein etwas spezielles Problem. Ich gebe 5 input-feldern "array-namen", also z.b. id[] um sie serverseitig verarbeiten zu können. Jetzt möchte ich bei einem Event (onchange) herausfinden, bzw. anzeigen, das wievielte Element des entsprechenden "Arrays" dies ist.
Dieser Ansatz koennte etwas angepasst helfen.
MfG, Thomas
Hallo nochmals...
ehrlichgesagt, ich steh etwas auf dem Schlauch. Ich will ja nur wissen, das wievielte Element im id[]-Array momentan verändert wird. Vielleicht um das ganze zu erklären: Ich gebe verschiedene Einträge aus einer DB aus. Nun will ich wissen, welche Einträge verändert wurden. Da dachte ich an ein hidden-modifiziert-feld, das dann auf 1 gesetzt wird, sobald ein der zeile, die aus dem Eintrag ausgelesen wurde, etwas verändert wird. Das ganze, damit ich nicht 50 Einträge in der DB mit den gleichen Daten update, weil sie nicht verändert wurden. Vielleicht befinde ich mich auch auf dem Holzweg und ich muss einen anderen Ansatz wählen...
Gruss
Hallo,
ehrlichgesagt, ich steh etwas auf dem Schlauch. Ich will ja nur wissen, das wievielte Element im id[]-Array momentan verändert wird.
Der folgende am genannten Beispiel orientierte Code vergibt dynamisch IDs fuer die mit "id[]" benannten Felder und fragt dann den jeweils am Ende der ID enthaltene Zahlenwert ab:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test by TM 10/04</title>
<script language="JavaScript" type="text/javascript">
<!--
var dom=false,ie=false,idfragment="test";
function Init()
{
var f,inputs,i=0,j=0;
f=document.getElementById("formular");
inputs=f.getElementsByTagName("input");
for(i=0;i<inputs.length;i++)
{
if(inputs.item(i).name="id[]")
{
inputs.item(i).id=idfragment+j;
j++;
}
}
if(f.addEventListener)
{
dom=true;
f.addEventListener("change",CheckChange,true);
}
else if(f.attachEvent)
{
ie=true;
for(i=0;i<f.childNodes.length;i++)if(f.childNodes.item(i).nodeName.toLowerCase()=="input")f.childNodes.item(i).attachEvent("onchange",CheckChange);
}
}
function CheckChange(event)
{
if(dom)alert("Ereignis kam von Element\n"+event.target.nodeName.toLowerCase()+" mit name=""+event.target.name+"" Index: "+event.target.id.substring(idfragment.length));
else if(ie)alert("Ereignis kam von Element\n"+event.srcElement.nodeName.toLowerCase()+" mit name=""+event.srcElement.name+"" Index: "+event.srcElement.id.substring(idfragment.length));
}
//-->
</script>
</head>
<body onload="Init()">
<form id="formular" action="">
<input type="text" name="id[]">
<input type="text" name="id[]">
<input type="text" name="id[]">
<input type="text" name="id[]">
<input type="text" name="id[]">
</form>
</body>
</html>
MfG, Thomas
Hi,
Ich gebe 5 input-feldern "array-namen", also z.b. id[] um sie serverseitig verarbeiten zu können.
Die zuverlaessigste Methode ist imho feste Indexwerte zu vergeben (sollte ja kein Problem sein wenn Du die Inputs in einem loop erzeugst) und dann wie folgt darauf zuzugreifen:
document.FORMNAME.elements["id[1]"];
Ansonsten kannst Du ueber das zurueckgegebene Array von document.getElementsByName("id[]") zugreifen, siehe auch http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_name
Gruesse, Joachim
Hallo Joachim
Dein erster Vorschlag geht aus serverseitiger Programmierung nicht, da ich nicht weiss wieviele Einträge es schlussendlich gibt und ob welche ausgelassen werden.
Der zweite wäre gut, nur weiss ich so immer noch nicht, welches Element des Arrays momentan verändert wurde, oder täusche ich mich da?
Danke und Gruss
hi,
Dein erster Vorschlag geht aus serverseitiger Programmierung nicht, da ich nicht weiss wieviele Einträge es schlussendlich gibt und ob welche ausgelassen werden.
wenn deine elemente _keine_ fortlaufende nummerierung haben - wie willst du dann clientseitig die "nummer" bestimmen, wenn der client die nummer gar nicht kennt?
am einfachsten wäre es vermutlich, wenn du jedem feld dynamisch (serverseitig) einen eventhandler onchange="merke_nummer(5);" gibst - die nummer sollte sich ja serverseitig an der stelle dynamisch einsetzen lassen, oder?
na und deine javascript-funktion merke_nummer() schreibt eben diese nummer dann da hin, wo du sie haben willst ...
gruß,
wahsaga
Hallo
Naja, ich dachte halt, wenn ich mit
document.FORMNAME.elements["id[]"][5] auf ein Element zugreifen kann, muss doch auch der "umgekehrte Weg" möglich sein. Sprich, den Index des Arrays rauszufinden.
Aber dann muss ich wohl wirklich einen anderen Lösungsansatz wählen...
Gruss Ben Se