Seite 1 von 4

[HTML/JavaScript] diverse Fragen / Diskussion

Verfasst: 03.04.2014 18:01
von es_91

Code: Alles auswählen

<!DOCTYPE html>
<html><head><script type="text/javascript">function killElement(element) {If (element) {var papa = element.parentNode;If (papa) papa.removeChild(element);}}</script>
</head>
<body>
<font face="Courier"><div id="background" style="width:720px;">
</div></font>
<script type="text/javascript">
document.getElementById("background").innerHTML = "Guten Tag.<br />"
</script>
<script type="text/javascript">
killElement(document.getElementById("background"));
</script>
</body>
</html>
Sollte <div> "background" nicht eigentlich gelöscht werden? Stattdessen wird "Guten Tag." angezeigt. :?

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 03.04.2014 18:40
von RSBasic

Code: Alles auswählen

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript">
             onload = function() {
                var papa = document.getElementById("background");
                if (papa) {
                    papa.innerHTML = "Guten Tag.<br />"
                    papa.parentNode.removeChild(papa);
                }
            }
         </script>
    </head>
    <body>
        <font face="Courier">
            <div id="background" style="width:720px;"></div>
        </font>
    </body>
</html>

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 03.04.2014 18:49
von es_91
Okay, dann wird das div Element wohl beim Laden der Seite gelöscht. Was aber ist, wenn ich zum Beispiel eine Timer-Funktion einbauen möchte? Alles JavaScript, nehme ich mal an. Also kann man nicht einfach im <body>-Bereich eine JavaScript-Funktion starten? Einstweilen danke ich Dir, RSBasic!

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 03.04.2014 18:52
von RSBasic
Javascript gehört nicht in den Body-Bereich. Wann soll dein Div-Element entfernt werden? Nach einigen Sekunden oder nach einem Buttonklick?

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 03.04.2014 18:56
von es_91
In dem Kontext, in dem ich das Löschen des div-Elements verwende, sollen dem Programmierer alle Freiheiten gegeben werden, mit PureBasic-Code (serverseitig) das Löschen des div-Elements auszulösen. Es kommen also Zeitgeber, onClick-Events, Dateioperationsbedingungen, eigentlich alles was man programmieren kann, in Frage.

Sag mir einfach: muss ich für jeden möglichen Grund der Löschung einen eigenen Java-Script-Pendanten für das in PB programmierte finden?

Um das mal ein Bisschen zu veranschaulichen, hier mal eine PSP-Datei ("PureServerPages"):

Code: Alles auswählen

<$
	IncludeFile "PSP\Console.pbi"
$>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<$
	Define Var
	Var = Date()
	*Console\OpenConsole()
	*Console\PrintN("Guten Tag.")
	
	If Var - Date() < -30000
	  *Console\CloseConsole()
	EndIf
$>
</body>
</html>
Wobei ...

- *Console\OpenConsole() ein div-Element erzeugt.
- *Console\PrintN() ein Java-Script ausführt, welches den innerHTML-Wert des div Elements beeinflusst.
- *Console\CloseConsole() das div-Element löschen soll.

Kompiliert sieht das dann so aus (bis jetzt):

Code: Alles auswählen

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<font face="Courier"><div id="background" style="width:720px;">
</div></font>
<script type="text/javascript">
document.getElementById("background").innerHTML = document.getElementById("background").innerHTML + "Guten Tag.<br />"
</script>
</body>
</html>
Ich suche... /EDIT: Und ich hab's verstanden. Ich muss clientseitigen JavaScript-Code erzeugen. Was ich oben gemacht habe funktioniert nur serverseitig.

Also muss ich für den Zweck, der mir vorschwebt, einen Scriptinterpreter schreiben, wie Kiffi es bei PB2Web gemacht hat.

Der PSP-Code sieht dann wie folgt aus:

Code: Alles auswählen

<$
	IncludeFile "PSP\Console.pbi"
$>
<!DOCTYPE html>
<html>
<head>
<script type="text/pbplusscript">
  Define Var = Date()
  
  If Var - Date() < -30000
<$
    *Console\CloseConsole()
$>
  EndIf
</script>
</head>
<body>
<$
	*Console\OpenConsole()
	*Console\PrintN("Guten Tag.")
$>
</body>
</html>
:roll:

/EDIT2: Nein, irgendwas mache ich in meiner Denklogik immernoch falsch.

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 03.04.2014 20:07
von Kiffi
es_91 hat geschrieben:/EDIT2: Nein, irgendwas mache ich in meiner Denklogik immernoch falsch.
vielleicht liegt das ja daran, dass Du serverseitig so ohne weiteres gar kein DIV im Browser
des Clients löschen kannst.

PHP, ASP und Co können das auch nicht. Alles, was zwischen den Code-Markern (<?php ... ?> oder
<% ... %> oder <$ ... $>) wird auf dem Server ausgeführt, bevor es zum Client geschickt wird.

Schau Dir mal SpiderBasic an. Ich glaube, dass das was für Dich sein könnte.

Grüße ... Kiffi

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 04.04.2014 15:13
von bobobo
RSBasic hat geschrieben:Javascript gehört nicht in den Body-Bereich.
Was soll denn der Blödsinn ? :mrgreen:

die schönsten Sachen kann machen gerade wenn javascript nicht im Kopfbereich rumlungert

Code: Alles auswählen

<html><head><title>Test</title>
</head><body>
<h1 id="Test"
 onmouseover="this.innerHTML = 'Sehen Sie?'"
 onmouseout="this.innerHTML = 'Ich bin dynamisch'">Ich bin dynamisch</h1>
</body></html>

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 04.04.2014 15:19
von RSBasic
Das ist aber ein schlechter "Programmier"stil. Und solche Inline-Events wie onmouseover wie du es grad gemacht hast, ist auch nicht so schön. Lieber extern eine separate Javascript-Datei erstellen und dort ein Observe auf ein DOM-Element setzen. Ist besser wartbar, übersichtlicher und strukturierter als ein Spaghetticode.

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 04.04.2014 17:03
von es_91
Und gleich noch ein Problem:

Warum funktioniert dieses Script nicht, wie es offenbar soll:

Code: Alles auswählen

<!DOCTYPE html>
<html>
  <head>
    <script type="text/javascript">
      onload = function() {var ConsoleBgDiv = document.createElement("div"); 
      ConsoleBgDiv.style.width = "720px";
      document.getElementById("ConsoleBG").appendChild(ConsoleBgDiv);
      document.getElementById("ConsoleBgDiv").innerHTML = document.getElementById("ConsoleBgDiv").innerHTML + "1<br />";
      document.getElementById("ConsoleBgDiv").innerHTML = document.getElementById("ConsoleBgDiv").innerHTML + "2<br />";
      document.getElementById("ConsoleBgDiv").innerHTML = document.getElementById("ConsoleBgDiv").innerHTML + "3<br />";
      document.getElementById("ConsoleBgDiv").innerHTML = document.getElementById("ConsoleBgDiv").innerHTML + "4<br />";
      document.getElementById("ConsoleBgDiv").innerHTML = document.getElementById("ConsoleBgDiv").innerHTML + "5<br />";
    } </script>
  </head>
  <body>
    <font family="courier">
      <span id="ConsoleBG">
      </span>
    </font>
  </body>
</html>
Es soll
1
2
3
4
5
angezeigt werden.

Re: [HTML/JavaScript] Warum löscht es dieses <div> nicht?

Verfasst: 04.04.2014 17:08
von RSBasic
Schau die Konsole an (F12 oder so), dann zeigt er dir im Browser auch die Javascript-Fehler an.
Siehe Zeile 9. Das Element "ConsoleBgDiv" ist Null und kann nicht gefunden werden.