HILFE!!! Target Frames
Christopher
- javascript
Hallo,
ich werde noch wahnsinnig. Mein Problem:
In einem Frameset habe ich von Frame1 mittels Formular ein ASP Dokument in Frame2 aufgerufen, sowie ein neues Fenster geöffnet.
Wenn ich jetzt nachdem dies geschehen ist wieder in Frame1 klicke, öffnet sich der Inhalt von Frame2 in einem neuen Fenster und nicht wie gewünscht in Frame2 selbst. Bin ich einfach nur zu blöd, oder gibt es da was zu beachten.
Bitte um Hilfe.
Vielen dank
Christopher
Hi Christopher
ich werde noch wahnsinnig. Mein Problem:
In einem Frameset habe ich von Frame1 mittels Formular ein ASP Dokument in Frame2 aufgerufen, sowie ein neues Fenster geöffnet.
Wenn ich jetzt nachdem dies geschehen ist wieder in Frame1 klicke, öffnet sich der Inhalt von Frame2 in einem neuen Fenster und nicht wie gewünscht in Frame2 selbst.
Wie heissen denn die Targets im Frame1? Wenn du das neue Fenster öffnest, verwendest du vielleicht den selben Namen wie Frame2 heisst?
Bin ich einfach nur zu blöd, oder gibt es da was zu beachten.
Bei solchen Fragen ist ein Stück Code oder die Adresse zu der Seite (wo das Problem auftritt) meist hilfreich.
Ciao,
wurmi
Also....
1. Ich habe mehrere Formulare in Frame1
2. Bei Klick wird das jeweilige Formular mittels document.forms[nummer des Formulars];
an a) Frame2 (heisst auch so) geschickt.
b) Neues Fenster öffnet sich und erhält seinerseits auch ein Formular.
Soweit so gut, funktioniert auch alles.
3. Ich Klicke in Frame2 auf ein hier generiertes Formular und sende es an den neuen Fensterinhalt, klappt auch gut.
4. Wenn ich jetzt wieder in Frame1 einen anderen Link (anderes Formular) anklicke, ändert sich wieder wie gewünscht der Inhalt im neuen Fenster, aber die gleichzeitige AKtualisierung des Inhaltes von Frame 2 wird in einem sich dann öffnenden Fenster ausgeführt.
Muss ich vielleicht irgend etwas "reseten"?
Der Code sieht so aus: (DaWolf, bzw. Lolita sind Variablen für die Formularnummern)
// Öffnen des Steckbrieffensters
function Steckbrieffenster()
{
DasFenster=window.open("../Steckbrief.asp", "MeinFenster", "fullscreen=1,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0, scrolling=0" );
document.forms[DaWolf].action = "../Steckbrief.asp" ;
document.forms[DaWolf].target = "MeinFenster"; // Open in a new window
document.forms[DaWolf].submit(); // Submit the page
DasFenster.focus();
return true;
}
DANN FOLGT DIE ANWEISUNG FÜR FRAME 2:
document.forms[Lolita].action="frame2_dm.asp" ;
document.forms[Lolita].target="frame2"; // Open in frame2
document.forms[Lolita].submit();
Ich würde mich über Hilfe sehr freuen
Christopher
hi,
wenn du Frames ansprechen willst, geht das eben nicht so:
document.forms[Lolita].target="frame2"; // Open in frame2
(target funktioniert hier nicht, und zu "document" kannst du in SelfHTML nachlesen)
sondern:
document.frames.frame2.forms.Lolita = "open(frame2_dm.asp)";
beziehungsweise innerhalb eines Framesets:
parent.frames.frame2.forms.Lolita = "open(frame2_dm.asp)";
Das ist jedenfalls ungefähr das Prinzip. Ob sich ein ASP-File innerhalb eines Formulars öffnen läßt, ist mir nicht klar, das wird wohl eher nicht gehen.
du hast dich von
document.forms[DaWolf].target = "MeinFenster"; // Open in a new window
etwas irreführen lassen. Auch da funktioniert "target" bestimmt nicht, aber weil dein "document" offenbar ein Frameset ist, sieht es wohl so aus als ob das passiert, was du gerne haben möchtest. Wenn du einen Debugger hast (mozilla), solltest du dir mal die Fehlermeldungen genau anschauen.
Christoph S.
Vielen Dank Christoph,
aber leider hat mir das nicht weitergeholfen.
Es scheint ja wirklich alles zu funktionieren, denn das gewünschte Dokument wird ja auch im richtigen Target angezeigt. nur sobald ich im 2ten Frame einmal geklickt habe, bzw. das dortige Formular losgesandt habe, macht er beim Klick ins erste Frame ein neues Fenster auf. Es scheint, als ob er dann kein "frame2" mehr als Target kennt.
Christopher
hi nochmal,
Es scheint ja wirklich alles zu funktionieren, denn das gewünschte Dokument wird ja auch im richtigen Target angezeigt
Wenn das geschieht, geschieht es bei deiner Konstruktion mit Sicherheit "aus Versehen", und solange du nicht entweder deinen Quelltext postest oder die URL angibst, wo man sich das anschauen kann, wirst du keine bessere Antwort bekommen können
_vergiß_ das "target", solange du für ein Framest irgendwelche Ziele innerhalb von Javascript-Funktionen benennen willst, und versuch zu verstehen, was bei Javascript "Methoden" und "Objekte" sind.
Steht alles sehr ausführlich in SelfHTML, ist allerdings manchmal nicht sofort verständlich.
nur sobald ich im 2ten Frame einmal geklickt habe, bzw. das dortige Formular losgesandt habe, macht er beim Klick ins erste Frame ein neues Fenster auf. Es scheint, als ob er dann kein "frame2" mehr als Target kennt
Richtig beobachtet. Das hängt mit mehreren Denkfehlern zusammen: du hast zum Beispiel eine Variable "MeinFenster" (wenn ich mich richtig erinnere), versuchst sie aber als Methode anzusprechen, und der Browser macht dir nen Strich durch die Rechnung und behandelt sie eben als Variable - "window.open". Du mußt dir einfach klar werden, was eine Variable ist, was ein Objekt, was eine Methode ...
Christoph S.
Hi Christoph, hier also der Quelltext, ich habe übrigens auch versucht das neue Fenster (MeinFenster) zu ersetzen, indem ich den Inhalt in einen dritten Frame geschickt habe; und er schickt es auch richtigerweise dorthin. Hier also der Quelltext:
</head> <script language="JAVASCRIPT"> // EINIGE VARIABLEN var Lollo; var Lolita=new Array(); var DaWolf; var JobPosition=new Array(); var LeaderCount; var LeaderNumber; function Frame2schliessen() { parent.frame2.location.href="../../frame4.html"; } var DaFormCounter=new Array();
</script> <% 'Definition der Variablen ACCESSZUGRIFF über OLEDB, Quelle der Datenbank ' Name der Tabelle, Öffnen der Datenbank, Datensatz, verschiedene SQLs, ' Zaehler usw. Dim strCon, strDB, strTabelle, strFormCounter Dim objCon, objRS Dim strSQL, strSQL1, strSQL2, strCountIt Dim LeaderCount, Formularname1, Formularname2 LeaderCount=0 strFormCounter=0
'Routine zum Schreiben der Namen und Titel Sub NameUndTitel Response.Write "<b>" & objRS("FirstName") & " " Response.Write objRS("LastName")& "<br></b><I>" Response.Write objRS("JobTitleShort")& " </I>" End Sub
strTabelle = "Userportraits" strDB = "Data Source=" &_ Server.MapPath("/fpdb/PORTRAIT.MDB") Set objCon = Server.CreateObject("ADODB.Connection") strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & strDB objCon.Open strCon Set objRS = Server.CreateObject("ADODB.Recordset") 'Datenbankzugriff
' VERSCHIEDENE SQLs strSQL = "Select * From UserPortraits Where JobPosition = 'Director_1_DM' ;" strSQL1 = "Select * From UserPortraits Where JobPosition = 'DM_Ass' Order By User_Id ;" strSQL2 = "Select * From UserPortraits Where JobPosition Like '%DM_%x' Order By JobPosition ;"
'Öffnen von SQL (Geschaeftsfuehrer in Datenbank ) objRS.open strSQL, objCon
' Zaehler für die Datensatzanzahl insgesamt in diesem Formular strCountIt=0 %>
<!-- **************************************************************** --> <!-- **************************************************************** --> <!-- BEGINN DER BEHANDLUNG VON DIREKTOREN-->
<% 'Datenbankzugriff für SQL2 (Direktoren) Set objRS = Server.CreateObject("ADODB.Recordset") objRS.open strSQL2, objCon
'Schleife mit Anzahl der Direktoren laut SQL2 do while not objRS.eof strCountIt=strCountIt + 1 LeaderCount=LeaderCount + 1 %> <tr><td colspan=3> <Div id=<% =strCountIt %> class="A" onmouseover="javascript:document.getElementById(<% =strCountIt %>).style.color='#990000';document.getElementById(<% =strCountIt %>).style.textDecoration='underline';" onmouseout="tauschenout(<% =strCountIt %>);" onclick="javascript:MitarbeiterClick(<% =strCountIt %>)">
<!-- Formular zur Datenweitergabe an den Steckbrief, gesendet wird hier die User_Id --> <Form METHOD=POST > <INPUT TYPE="HIDDEN" NAME="User_Id" VALUE=<% =objRS("User_Id") %> onclick="javascript:Mitarbeiterclick(<% =strCountIt %>)">
<!-- Formular zur Datenweitergabe an Frame 2, gesendet wird hier die Variable LeaderCount um zu sehen, wer in der Abteilung hier DM welche Untergebene hat <INPUT TYPE="HIDDEN" NAME="Subcategory" VALUE="<% =LeaderCount %>" onclick="javascript:Mitarbeiterclick(<% =strCountIt %>)" > --> </Form>
<!-- Formular zur Datenweitergabe an Frame 2, gesendet wird hier die Variable LeaderCount um zu sehen, wer in der Abteilung hier DM welche Untergebene hat --> <Form METHOD=POST> <INPUT TYPE="HIDDEN" NAME="Subcategory" VALUE="<% =LeaderCount %>" onclick="javascript:Mitarbeiterclick(<% =strCountIt %>)" > </Form>
<% ' Zaehler welches Formular angesprochen wird strFormCounter=strFormCounter + 2 Response.Write strFormCounter %>
<script language="JAVASCRIPT">
// Der gleiche Zaehler nur in Javascript als Variable DaFormCounter[<% =strCountIt %>]=<% =strFormCounter %> ; </script>
<% ' Schreiben von Name und Titel der Direktoren Call NameUndTitel %> </div>
</td></tr></table> <% objRS.movenext Loop strCountIt=strCountIt + 1 %>
<!-- ENDE BEARBEITUNG DER DIREKTOREN --> <!-- ************************************************************ --> <!-- ************************************************************ -->
<% 'SCHLIESSEN DER DATENFELDER, BZW. DATENBANK objRS.close Set objRS = Nothing objCon.close Set objCon = Nothing %>
<script language="JAVASCRIPT"> var fensteractive="inaktiv"; // ****************************************************** // ****************************************************** // Öffnen des Steckbrieffensters // ********************************************************* // ********************************************************* function Steckbrieffenster() { DasFenster=window.open("../Steckbrief.asp", "MeinFenster", "fullscreen=1,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0, scrolling=0" ); //window.name='Main'; fensteractive="aktiv";
// ******************************************************************** // ******************************************************************** // ABSCHICKEN DES FORMULARS AN STECKBRIEF // ******************************************************************** // ******************************************************************** document.forms[DaWolf].action = "../Steckbrief.asp" ; document.forms[DaWolf].target = "MeinFenster"; // Open in a new window document.forms[DaWolf].submit(); // Submit the page DasFenster.focus();
// ******************************************************************** // ******************************************************************** // ABSCHICKEN DES FORMULARS AN FRAME 2 ZUR ERMITTLUNG DER UNTERGEBENEN // ******************************************************************** // ******************************************************************** if (Lollo > 0) { document.forms[Lolita].action="frame2_dm.asp" ; document.forms[Lolita].target="frame2"; // Open in frame2 document.forms[Lolita].submit(); } }
// ******************************************************************** // ******************************************************************** // Schliessen des Steckbriefes // ******************************************************************** // ******************************************************************** function Steckbriefschliessen() { if(DasFenster.closed == false) {DasFenster.close();}
}
var z;
var elstatus=new Array(<% =strCountIt %>);
// ******************************************************************** // ******************************************************************** // Funktion zum Entleeren der Frames // ******************************************************************** // ******************************************************************** function clearall3frames() { //parent.frame2.location.href="../../frame4.html"; parent.frame3.location.href="../../frame4.html"; parent.frame4.location.href="../../frame4.html";
}
// ******************************************************************** // ******************************************************************** // Deaktivieren Für MouseOver MouseOut // ******************************************************************** // ******************************************************************** function deaktivate() { for (z=0; z<<% =strCountIt %>; z++) {elstatus[z]="inaktiv";} for (z=0; z<<% =strCountIt %>; z++) { document.getElementById(z).style.color="#666666"; document.getElementById(z).style.textDecoration="none"; } }
// ******************************************************************** // ******************************************************************** // MouseOver EFFEKTE // ******************************************************************** // ******************************************************************** function tauschenout (id) { if (elstatus[id]=="aktiv") { document.getElementById(id).style.color="#990000"; document.getElementById(id).style.textDecoration="underline"; } else { document.getElementById(id).style.color="#666666"; document.getElementById(id).style.textDecoration="none"; } }
// ********************************************************************** // ********************************************************************** // HIER WIRD DAS FORMULAR AN DIE A S P Dateien geschickt // ON CLICK // ************************************************************************ // *********************************************************************** function MitarbeiterClick(id) { Lollo=(id) ; // ********* AKTUELLER MITARBEITER Lolita=DaFormCounter[id]; // ********* ZAEHLER WELCHES FORMULAR DaWolf=Lolita -1 ; // *********
// ZWEITEN FRAME KURZFRISTIG ENTLEEREN parent.frame2.location.href="../../frame4.html";
// FÜR MOUSEOVEREFFEKTE, ALLE SCHRIFTEN GRAU deaktivate();
// FÜR MOUSEOVEREFFEKTE AKTIVER LINK = ROT elstatus[id]="aktiv"; document.getElementById(id).style.color='#990000'; document.getElementById(id).style.textDecoration='underline';
// HIER WIRD JETZT DAS STECKBRIEFFENSTER GEÖFFNET, FUNKTION SIEHE OBEN (Dort werden die Daten auch an Frame2 geschickt) Steckbrieffenster();
} </script>
<body text="#000000" background="../../images/Frame_Background.gif" link="#990000" alink="#990000" vlink="#990000" marginwidth='5' marginheight='5' onUnload="Steckbriefschliessen()" onload="Frame2schliessen()"> </body> </html>
na dann nochmal ...
Hier also der Quelltext:
var Lolita=new Array();
da gehts schon los. Du schreibst also einen Array, und möchtest eigentlich die Werte deines Arrays an eine Variable übergeben. Das geht bloß nicht auf diese Weise - dein Array hat ja gar keinen Inhalt. Das geht höchstens so:
var Lolita = 0;
Lola = new Array ("Element1","Element2",..."Elementn");
Lolita = Lola[1];
(dann hast du das _zweite_ Array-Element in deine Lolita-Variable gepackt)
und weiter unten:
parent.frame2.location.href="../../frame4.html";
das funktioniert nur in dieser Form:
parent.frames.frame2.location.href="../../frame4.html";
Dann:
<% 'Definition der Variablen ACCESSZUGRIFF über OLEDB, Quelle der Datenbank
' Name der Tabelle, Öffnen der Datenbank, Datensatz, verschiedene SQLs,
' Zaehler usw.
Dim strCon, strDB, strTabelle, strFormCounter
Das steht hier gar nicht zur Diskussion. Du fragst nicht nach VBScript, sondern nach Javascript.
<Div id=<% =strCountIt %> class="A" onmouseover="javascript:document.getElementById(<% =strCountIt %>).style.color='#990000';document.getElementById(<% =strCountIt %>).style.textDecoration='underline';" onmouseout="tauschenout(<% =strCountIt %>);" onclick="javascript:MitarbeiterClick(<% =strCountIt %>)">
die Konstruktion ist mehr als zweifelhaft.
document.forms[DaWolf].action = "../Steckbrief.asp" ;
das könnte funktionieren.
document.forms[DaWolf].target = "MeinFenster";
und das kann _nicht_ funktionieren, weil "target" hier nix zu suchen hat, wie ich dir bereits geschrieben habe
//parent.frame2.location.href="../../frame4.html";
parent.frame3.location.href="../../frame4.html";
parent.frame4.location.href="../../frame4.html";
Nochmal: die korrekte Form wäre
parent.frames.frame3.location.href="../../frame4.html";
parent.frames.frame4.location.href="../../frame4.html";
Machs dir doch nicht so kompliziert mit so einem großen Brocken. Probier erstmal was Leichteres, Einfacheres aus, um das Prinzip zu verstehen.
Christoph S.