mit werten zwischen fenstern wandern

südpol

Erfahrenes Mitglied
Hi,

sorry hatte keinen besseren Titel im Kopf.. :D

Ich habe folgendes Problem. Ich habe ein sehr großes Formular welches mittels einer clonefunktion um weitere elemente erweitert werden kann. Jedes dieser Elemente beinhaltet mehrer formularfelder z. B. input1[], input2[], input3[] etc. Für eines dieser Formularfelder will /muss ich nun die Auswahl des values in ein popup verlagern. Soweit noch ganz einfach :D

In dem popup habe ich nun eine Funktion die zum einen das sichtbare inputfeld phase[] sowie das hidden field phase_id[] mit den in dem popup ausgwählen Inhalt füllen soll.

Wenn ich das richtig verstanden habe geht das mit

opener.document.Form.Feldname.value = xy

Mit dem Feldnamen habe ich jedoch durch mein geclone ein Problem. das Feld hat keinen eindeutigen Namen.

Kann ich irgendwie über DOM rausfinden das wievielte phase[] feld gerade angeklickt wird? Damit könnte ich das ganze dann z. B. über phase[9] ansprechen und ändern...

Vielen Dank!
 
Hi,

oder noch ein anderere Ansatz. Kann ich über einen Link eine Objektreferenz (this) übergeben? Wenn ja könnte man doch bestimmt mit einer relativen Adressierung arbeiten. Sprich this wäre mein phase[] feld das könnte ich somit mit diesem link ändern. Ich habe auch schon mal gesehen, dass man einfach das element vor dem aktuellen ansprechen kann - das wäre immer mein hidden field phase_id[]. Damit könnte es auch gehen. Fänd ich sogar fast schöner, da die Funktion dann auch für andere Seiten eingesetzt werden könnte die genau so aufgebaut sind... :D

Gruß
 
Wenn ich das richtig verstanden habe geht das mit

opener.document.Form.Feldname.value = xy

Wenn der Name des Formularfeldes eckige Klammern enthält, musst du es per
Code:
........document.Form.elements['Feldname[]'].........
...ansprechen..die von dir gepostete Variante funktioniert da nicht.

Kann ich irgendwie über DOM rausfinden das wievielte phase[] feld gerade angeklickt wird
...das geht auch ohne das DOM.

Übergebe dem Skript die angeklickte Box als Objekt.
Deklariere eine Variable mit Startwert "0"

Dann gehe alle Elemente des Formulars durch.
Ist der Name identisch mit dem des angeklickten Elementes...inkrementiere die Variable.

Ist das Element identisch mit dem angeklickten Element... dann hast du in der Variablen den "Index" des angeklickten Elementes
Code:
<script type="text/javascript">
<!--
function index_(objBox)
{
k=0;
for(j=0;j<objBox.form.elements.length;++j)
    {
    if(objBox.form.elements[j].name==objBox.name)
        {
            k++;
            if(objBox.form.elements[j]==objBox)
                {
                    alert('Ich bin Box #'+k+' mit dem Namen '+objBox.name);
                    return;
                }
        }
    }
}
//-->
</script>
<!-- ...-->
<form>
 <input type="checkbox"name="phase[]"onclick="index_(this)">
 <input type="checkbox"name="phase[]"onclick="index_(this)">
 <input type="checkbox"name="phase[]"onclick="index_(this)">
</form>

Kann ich über einen Link eine Objektreferenz (this) übergeben? Wenn ja könnte man doch bestimmt mit einer relativen Adressierung arbeiten
mit "this" übergibst du immer das den Event auslösende Element als Objekt... bei einem angeklickten Link also diesen Link.

Ich habe auch schon mal gesehen, dass man einfach das element vor dem aktuellen ansprechen kann
Das geht mit previousSibling... zwischen beiden Feldern darf sich dabei nix befinden... nicht mal ein Leerzeichen(aber den Spruch kennst du ja schon:-))
 
Hi erst mal ein ganz großes DANKE! 95 % konnte ich mit ein wenig nachlesen übernehmen ;-)

Mit dem Zurück geben der Werte an das "alte" Formular habe ich allerdings gerade ein paar probleme.

Mein Aufruf erfolgt über einen Link:
Code:
<a href="#" class="select_box_link" onclick="SetVar('xy',1,2); this.close();">xy</a>

die funktion sieht wie folgt aus:
Code:
function SetVar(name, id, obj_link)
{
  opener.document.Form.elements['new_phase['obj_link']'].value = name;
}

ich erhalte aber immer die Meldung objekt erwartet. Ich habe auch schon etwas mit den Anführungszeichen gespielt aber war damit auch nicht erfolgreich *heul*.

Kann jemand von euch hier zufällig einen Fehler erkennen?

Danke!
 
Versuchs mal mit
Code:
opener.document.Form.elements['new_phase[]'][objLink].value = name;

Dabei musst du aber beachten, dass bei Arrays(und das sind die phase[]-Elemente in diesem Fall), bei 0 zu zählen begonnen wird. Das erste Element wird also mit

Code:
opener.document.Form.elements['new_phase[]'][0]
...angesprochen.
 
*heul*
ich bekomme den Wert einfach nicht von einem Fenster in das andere. Ich habe mir jetzt sogar schon ne Dummy Seite gebastelt damit ich die 1200 Zeilen php - code als Fehler ausschließen kann... Hilft nix. *immernochheul*

Was mache ich falsch?
js_include.js:
Code:
function SetVar(name, id, obj_link)
{
  opener.document.testform.elements['new_phase[]'][obj_link].value = name;
}

function popup(url, para1)
{
  window1 = window.open(url +'?link='+ para1,"SELECT","width=300,height=400,left=450,top=120,scrollbars=yes,status=yes");
}

function get_objID(objBox)
{
  k=0;
  for(j=0;j<objBox.form.elements.length;++j)
  {
    if(objBox.form.elements[j].name==objBox.name)
    {
      k++;
      if(objBox.form.elements[j]==objBox)
      {
        return k;
      }
    }
  }
}
mainpage.html
Code:
<html>
<head>
 <title>test</title>
 <script language="javascript" src="js_include.js" type="text/javascript"></script>
</head>
<body>  
  <h2>Testform</h2>
  <form name="testform">
    <input name="test1[]" type="text" />
    <input name="new_phase_id[]" type="hidden" value=""/>
    <input type="text" name="new_phase[]" value="" onclick="javascript:popup('pop.php', get_objID(this));" />
  </form>
</body>
</html>
pop.php
Code:
<html>
  <head>
    <title>testpop</title>  
    <script language="javascript" src="js_include.js" type="text/javascript"></script>
  </head>
  <body>
  <h2>Select one</h2>
  <a href="#" onclick="SetVar('test','1','<?php echo $_GET['link']; ?>'); this.close();">klick</a><br />
  <a href="#" onclick="SetVar('test2','2','<?php echo $_GET['link']; ?>'); this.close();">klick2</a>
  <?php ?>
  </body>
</html>

Bin für jeden Tipp dankbar! (Das popup geht auf aber beim klick auf das Fenster kommt ne Fehlermeldung...)

... das gekaufte Buch taugt nix. Die fangen da gleich an zu erklären wie man Dopboxen bastelt - suuuuper damit kann ich nichts anfangen :D naja viellecht ist der letzte Teil ja noch besser - irgendwo müssen die Grundlagen ja stehen.. :rolleyes:

Gruß
 
Zuletzt bearbeitet:
hmm ok ich habe jetzt noch etwas weiter gespielt.

wenn ich aus meinen pop.php heraus mit folgender Syntax auf mein Formular gehe, dann funktioniert es:

Code:
opener.document.testform.elements[2].value = 'test'

hier verwende ich nun aber die ID des inputfeldes welche sich im Baum aus allen vorhandenen elementen ergibt. Kann ich mir diese ID irgendwie ausgeben lassen? Oder muss ich dafür versuchen so eine Schleife zu basteln wie sie sven für mich schon mal geschrieben hat?

Vielen Dank für eure Hilfe!
 
Zwei Probleme:
  • Wie bereits weiter oben erwähnt, beginnen Arrays mit dem Index 0.... du musst daher von obj_link 1 abziehen.(alternativ könntest du in get_objID() den Zähler "k" auch erst nach dem "return" inkrementieren....käme aufs gleiche raus)
  • Falls du das mit dem IE testest, gibt es Probleme, wenn du die Felder noch nicht geclont hast... der beschriebene Array aus Elementen ist im IE nur verfügbar, wenn es mehrere Elemente gleichen namens gibt....was dann nicht der Fall ist.

Lösung: da das ganze ohnehin auf DOM-Browser zugeschnitten ist, kannst du die Elemente per getElementsByName() ansprechen.
Das läuft ähnlich wie form.elements['name'][?].........

Hauptunterschiede:
  • es betrifft alle Seitenelemente, welche ein name-Attribut besitzen... also nicht nur Formularfelder
  • der IE legt den Array dort auch an, wenn es nur 1 Element mit einem bestimmten Namen gibt(andere Browser natürlich auch:-))


Summa Summarum:
Code:
function SetVar(name, id, obj_link)
{
  opener.document.getElementsByName('new_phase[]')[obj_link-1].value = name;
}
 
Hi,

also das -1 habe ich schon in er Funktion get_objID eingebaut (nur vergessen zu posten...).

Ich habe die Funktion SetVar jetzt angepasst jedoch habe ich noch immer keinen Erfolg damit. Das array sollte auf jeden Fall vorhanden sein, da ich nun einfach noch ein weiteres verstecktes dummy feld mit dem Namen 'new_phase[]' eingefügt habe :D.

Von den Browsern her könnte ich, auch wenn ich es ungern mache, darauf vertrauen, dass der ie vor mir steht. (Intranet).

Ich habe jetzt mal in meine pop.php einen weitern Link eingefügt mit dem es geht - allerdings weiß ich nicht wie ich die element ID meiner Objekte zuverlässig auslesen kann...

pop.php
Code:
<a href="#" onclick="javascript:opener.document.testform.elements[2].value = 'test'">klick mich</a>

Gruß
 
Das geht ähnlich wie bei dem, was du bisher hast:

Code:
for(e=0; e < document.formularname.elements.length; ++e)
    {
    if(document.formularname.elements[e] == aktuellesElement)
        {
            return e;
        }
    }

Wobei es mich allerdings wundert, dass es bei dir mit der von mir geposteten Änderung an setVar() nicht geht.... ich hab das anhand deines Codes probiert, ....es ging problemlos(ich wüsst auch nicht, warum es nicht gehen sollte)... vielleicht steckt der Fehlerteufel woanders.
 

Neue Beiträge

Zurück