Chaos: layer - div Ausgabe ändern

Hi,

Nun probiere ich schon seit 2 Tagen herum und habe irgendwie ein Brett vor dem Kopf.

Ich will auf meiner Homepage eine Comicfigur die eine Sprechblase enthält in der sie dem Besucher eine Frage (Formular mit Radio-Buttons, Input-Felder usw.) stellt und in der sie anschließend auch eine Antwort darauf gibt. Zum Beispiel:"Vielen Dank" o.ä.

Diese Figur wird mittels eines transparenten Layers auf die vorhandene Seite eingebunden. (Aufgerufen wird sie entweder von *.php4-Seiten oder von *.shtml-Seiten mittels include)

Soweit ja alles ganz gut, nur sobald man auf das Submit-Button klickt, verschwindet die aufgerufene Seite. Diese sollte aber erhalten bleiben und sich ja nur der Inhalt der Sprechblase ändern.

Wer weiß Hilfe wie ich das anstellen muß?

Hier ist das Script für die Comicfigur. (Nicht von mir wie man sieht)

<HEAD>
<!-- Popup-Infobox-Anfang ---->
<script language="JavaScript1.2">
//Popup Box- By Jim Silver @ jimsilver47@yahoo.com
//Exlusive permission granted to Dynamic Drive (http://dynamicdrive.com) to include this script in their DHTML archive.
//For full source code, terms of use, and 100's more scripts, visit http://www.dynamicdrive.com

var ns4=document.layers
var ie4=document.all
var ns6=document.getElementById&&!document.all

//drag drop function for NS 4////
/////////////////////////////////

var dragswitch=0
var nsx
var nsy
var nstemp

function drag_dropns(name){
if (!ns4)
return
temp=eval(name)
temp.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
temp.onmousedown=gons
temp.onmousemove=dragns
temp.onmouseup=stopns
}

function gons(e){
temp.captureEvents(Event.MOUSEMOVE)
nsx=e.x
nsy=e.y
}
function dragns(e){
 if (dragswitch==1){
  temp.moveBy(e.x-nsx,e.y-nsy)
  return false
 }
}

function stopns(){
temp.releaseEvents(Event.MOUSEMOVE)
}

//drag drop function for ie4+ and NS6////
/////////////////////////////////
function drag_drop(e){
 if (ie4&&dragapproved){
  crossobj.style.left=tempx+event.clientX-offsetx
  crossobj.style.top=tempy+event.clientY-offsety
  return false
 }
  else if (ns6&&dragapproved){
  crossobj.style.left=tempx+e.clientX-offsetx
  crossobj.style.top=tempy+e.clientY-offsety
  return false
 }
}

function initializedrag(e){
crossobj=ns6? document.getElementById("showimage") : document.all.showimage

var firedobj=ns6? e.target : event.srcElement
var topelement=ns6? "HTML" : "BODY"

while (firedobj.tagName!=topelement&&firedobj.id!="dragbar"){
 firedobj=ns6? firedobj.parentNode : firedobj.parentElement
}

if (firedobj.id=="dragbar"){
 offsetx=ie4? event.clientX : e.clientX
 offsety=ie4? event.clientY : e.clientY

tempx=parseInt(crossobj.style.left)
 tempy=parseInt(crossobj.style.top)

dragapproved=true
 document.onmousemove=drag_drop
 }
}

document.onmousedown=initializedrag
 document.onmouseup=new Function("dragapproved=false")

////drag drop functions end here//////
function hidebox(){
if (ie4||ns6)
crossobj.style.visibility="hidden"
else if (ns4)
document.showimage.visibility="hide"
}
</script>
<!-- Popup-Infobox-Ende ---->

</HEAD>

<BODY BGCOLOR="#7fb0ff" LINK="#ff8000" ALINK="#ff8000" VLINK="#ff8000">

<!-- Popup-Infobox-Anfang ---->
<div id="showimage" style="position:absolute;width:100px;left:480;top:100">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">
  <TR>
    <TD VALIGN="BOTTOM"><DIV id="dragbar" style="cursor:hand"><ilayer width="100%" onSelectStart="return false"><layer width="100%" onMouseover="dragswitch=1;if (ns4) drag_dropns(showimage)" onMouseout="dragswitch=0"><IMG SRC="sophia.gif" TITLE="Ich bin Sofia ;)" ALT="Ich bin Sophia ;)" WIDTH="50" HEIGHT="77" ALIGN="BOTTOM" BORDER="0" NATURALSIZEFLAG="3"></layer></ilayer></TD>
    <TD>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 >
<tr>
<td><img SRC="alo.gif" height=10 width=10></td>
<td><img SRC="oben.gif" height=10 width=250></td>
<td><img SRC="aro.gif" height=10 width=10></td>
</tr>
<tr>
<td BACKGROUND="seite.gif"> </td>
<td BACKGROUND="oben.gif"><FONT FACE="ARIAL" SIZE="-2">

HIER KOMMT DIE FRAGE HIN, BZW NACH SUBMIT DIE ANTWORT! (Aber ohne die aufgerufene Seite zu verändern.)

</TD>
<td BACKGROUND="seite.gif"> </td>
</tr>
<tr>
<td><img SRC="alu.gif" height=10 width=10></td>
<td><img SRC="oben.gif" height=10 width=250></td>
<td><img SRC="aru.gif" height=10 width=10></td>
</tr>
</table>
</TD>
  </TR>
</TABLE>
</div>
<!-- Popup-Infobox-Ende ---->

  1. Hallo,

    Hier ist das Script für die Comicfigur. (Nicht von mir wie man
    sieht)

    und das ist eins der Probleme. Hier ist ein Forum für Selbermacher, und deswegen mag sich wahrscheinlich keiner ein Script zu Gemüte führen, daß weder von Dir noch "von uns" ist. Simpel gesagt hat kaum einer Lust, sich da durchzuwühlen. Aber ich schätze, daß "Problem" liegt eh nicht am Script. Wenn die Seite nach dem anklicken des Absenden-Buttons im Formular verschwindet, dann wäre es interesant zu wissen, was denn das Formular Deiner Seite dann aufruft? Denn da liegt wohl der Grund, das danach eine neue Seite aufgerufen wird. Aber das Formular habe ich auf die Schnelle bei Dir nicht gefunden ;-).....

    Chräcker

    http://www.Stempelgeheimnis.de

    1. und das ist eins der Probleme. Hier ist ein Forum für Selbermacher, und deswegen mag sich wahrscheinlich keiner ein Script

      zu Gemüte führen, daß weder von Dir noch "von uns" ist. Simpel

      Problemlösung: "Ihr" programmiert mir eins, wenn andere fremde Scripte nicht erwünscht sind;))

      Aber mal im Ernst. Es ist doch egal, ob der Ansatz von mir oder von jemand anderem ist. Da ich DHTML nicht sonderlich beherrsche, kann und will ich das Rad nicht neu erfinden.

      aufruft? Denn da liegt wohl der Grund, das danach eine neue Seite aufgerufen wird. Aber das Formular habe ich auf die Schnelle bei Dir nicht gefunden ;-).....

      Die Datei in der sich die Figur befindet nennt sich z.B. "comic.php4" und wird zum Beispiel mittels

      <!--#include virtual="comic.php4"-->

      in der Datei Seite1.shtml includet.

      Wenn ich das <FORM ... ACTION="zum php-script"...> mit dem Absenden Button schicke, öffnet er logischerweise die PHP-Seite, aber nicht im Layer von comic.php4 sondern in Seite1.shtml.
      Da ich aber die Benutzereingaben in einer DB-Bank speichere, muß ich vorher erst mit einem PHP-Skript die Inputs aus dem Form verarbeiten und dann würde ich halt gerne wieder in den Layer zurückkehren, sodaß nur dieser (Inhalt) verändert wird. Da aber Form die Datei comic.php4 nach Absenden aktualisiert fliegt die Seite (Seite1.shtml) die comic.php4 includet hat, raus.

      Ich hoffe, das hab ich jetzt verständlich rübergebracht;)

      Ciao Chaos

      1. Hallo,

        oh, da ist, glaube ich, nur ein Mißverständnis grunsätzlicher Art. Auch ich denke, daß man nicht jedes Rad neu erfinden muß. Auch glaube ich nicht, daß ich für jedes und alles meiner "Konsumwünsche" immer alles selberbauen muß. Und schlußendlich kann man auch aus vorgefertigten Scripten was lernen. Das Mißverständnis liegt nur darin, daß dies hier ein Selbermachforum ist. Also für Leute, die entweder ein Script (z.Bsp.) selber schreiben (wollen) und die trotz recherche in selfhtml und Archiv nicht weiter kommen, oder für welche, die erkennen lassen, daß sie ein fertiges Script versucht haben zu analysieren, und an einer speziellen, uns nennbaren Stelle nicht weiterkommen und vorher ebenfalls schon selber die eine oder andere Information in selfhtml, Archiv oder Internet versucht haben zu verwerten.

        nicht falsch verstehen, man muß das nicht alles machen um ein netter mensch zu sein, man muß das meiner Meinung auch nicht immer unbedingt machen, um eine gute Seite zu kleben (obwohl da schon die Meinungen auseinander gehen), aber man muß das zwingend machen, um hier im Forum fundierte hilfe zu bekommen. Das ist nicht schlimm, dieses Forum ist freiwillig, auch der Besuch. Es ist nur einfach so. Deswegen konnte bzw wollte bisher auch keiner helfen. Nicht, um Dich zu erziehen, keine Sorge, sondern weil es einfach hier das falsche Forum für Deinen Lösungsansatz ist.

        Ich selber kann Dir übrigens auch nicht weiter helfen, weil ich von PHP keine Ahnung habe, nur am Rande ;-)

        Chräcker

        http://www.Stempelgeheimnis.de

      2. Moin!

        Die Datei in der sich die Figur befindet nennt sich z.B. "comic.php4" und wird zum Beispiel mittels

        <!--#include virtual="comic.php4"-->

        in der Datei Seite1.shtml includet.

        Wenn ich das <FORM ... ACTION="zum php-script"...> mit dem Absenden Button schicke, öffnet er logischerweise die PHP-Seite, aber nicht im Layer von comic.php4 sondern in Seite1.shtml.

        Achtung, Denkfehler in deiner Vorgehensweise.

        Die Sache mit dem Browser läuft so: Er nimmt immer vollständige Seiten vom Server entgegen. Um eine neue Seite zu erhalten, kann der Browser wahlweise einfach nur eine URL übermitteln, oder auch noch ein paar Formulardaten mitschicken.

        Wenn deine Comicfigur also Bestandteil einer vollständigen Seite ist, dann muß das Ergebnis des Formularabschickens wieder eine vollständige Seite sein. Logischerweise kannst du die Formulareingabe dann nicht dem winzigen Ausschnitt schicken, der die Comicfigur generiert, sondern mußt es dem Gesamtskript schicken, welches die komplette Seite generiert.

        Lösungsansätze:
        1. Wie erwähnt: Das Gesamtskript muß mit den Comiceingaben zurechtkommen (kann sie ja durchreichen).

        2. Du löst die Comicfigur aus der Seite heraus und setzt an diese Stelle einen IFRAME. Dort hinein kommt dann eine komplette HTML-Seite, welche nur die Comic-Figur enthält - und schon klappt die Formular-Absende-Geschichte innerhalb des IFRAMEs prima. Aber Netscape 4 kann keine IFRAMEs, das könnte ein Problem werden.

        3. Natürlich geht das, was mit IFRAMES geht, auch mit ganz normalen Frames. Das Prinzip ist, eine funktionale Einheit "Comicfigur" unabhängig von der restlichen Seite mit dem Server kommunizieren zu lassen.

        Was definitiv nicht möglich ist: Durch Formularabschicken neue Daten für einen <div>-Layer vom Server zu kriegen. Es ist in den einzelnen Browsern ja oftmals schon unmöglich, die Inhalte von solchen Layern per Javascript zu ändern. Und da es keine eigenständige HTML-Ressource ist, sondern Bestandteil eines Fensters, kann nur durch komplettes Neuübertragen der gesamten Seite der Inhalt des <div> aktualisiert werden.

        - Sven Rautenberg

        1. Hi Sven,

          Moin!
          Was definitiv nicht möglich ist: Durch Formularabschicken neue Daten für einen <div>-Layer vom Server zu kriegen. Es ist in den einzelnen Browsern ja oftmals schon unmöglich, die Inhalte von solchen Layern per Javascript zu ändern. Und da es keine eigenständige HTML-Ressource ist, sondern Bestandteil eines Fensters, kann nur durch komplettes Neuübertragen der gesamten Seite der Inhalt des <div> aktualisiert werden.

          Danke für Deine Nachricht. Hab das mit den IFrames probiert. Jo, schon ne Lösung nur ne schlechte. Wie Du schon geschrieben hast...NS4 kennt das halt net:(
          Hab aber weiterprobiert und hab das Ganze jetzt folgendermaßen gelöst:
          Ist zwar nicht die eleganteste, aber funktioniert soweit mit IE, Opera und NS.
          Ich übergebe mittels getenv("REQUEST_URI"); von der Seite wo "Sophie" includet wird die URL und nach beendigen des Scripts comic.php4 wird mittels self.location.href
          die vorherige Seite halt neu geladen und ich übergebe Variablen aus comic.php4 wieder zurück. Der Server läuft recht flott und somit merkt man es kaum, das der gesamte Inhalt neu geladen wird. Sophie erscheint auch nicht so oft, als das dadurch der Traffic um 1000% wachsen würde.

          Bestimmt nicht so, wie im Lehrbuch definiert, aber was solls...It works;)

          Trotzdem nochmal danke für Deinen Denkanstoß.

          Zu Chräcker:
          Kein Problem. Habs net mißverstanden und nehm Dir auch nix übel oder so. Jeder hat halt Gebiete in denen er bewandert ist, aber bei DHTML reiß ich die weiße Fahne hoch und bin dann froh, wenn ich fertige Dinge zum Aus- bzw. umbauen finde;)

          Have fun,
          Chaos

          1. Hallo,

            ;-) jaja, nene, jaja, ist ja auch nicht die schlechteste Methode, ein fertiges Script zu nehmen, und dann durch die notwendige Anpassung zu lernen. War mir nur nicht sicher, in wie weit Du schon selber "rumgepflückt" hattest, vielleicht habe ich mich ja auch vertan ;-)

            viel Glück,

            Chräcker