# Smilie-Code in Textarea per klick



## Trash (21. Dezember 2002)

Hallo,
man sieht ja immer öfter dieses nette Feature wenn man auf einen Smilie klickt ist der code des Smilies dann im Textarea Feld ich hab das auch mal probiert nur es funktioniert nicht, hier ein Code auszug..

Ganz oben:

```
<script language="JavaScript">
<!--
function seticon(Zeichen) {
   document.action.text.value =
   document.action.text.value + Zeichen;
}
//-->
</script>
```

Danach weiter unten:

```
echo("    <textarea name='Text' wrap='virtualy' rows='10' cols='40'></textarea>\n");
```

Danach:

```
echo("<a href=\"javascript:seticon('<img src=gif/flag_brazil.gif alt=BRA border=0>')\"><img src=\"gif/flag_brazil.gif\" alt=\"BRA\" border=\"0\"></a>\n");
```

Lasst euch von dem PHP-Code drumrum nicht irretieren...


----------



## Adam Wille (21. Dezember 2002)

```
<script language="JavaScript">
<!--
function seticon(Zeichen) {
    document.action.text.value = document.action.text.value + Zeichen;
}
//-->
</script>
```
ist nicht sinnvoll, da du durch den Zeilenumbruch jedesmal von der Script-Engine ein Semikolon an's Zeilenende gepackt bekommst und dadurch 2 getrennte Anweisungen statt einer hast.

Sinnvoller ist daher:

```
<script type="text/javascript" language="JavaScript">
<!--
function seticon(Zeichen) {
    document.action.text.value = document.action.text.value + Zeichen;
}
//-->
</script>
```
aber folgende Schreibweise ist etwas kürzer und dennoch gleichbedeutend:

```
<script type="text/javascript" language="JavaScript">
<!--
function seticon(Zeichen) {
    document.action.text.value += Zeichen;
}
//-->
</script>
```
hth,
Geist


----------



## Trash (21. Dezember 2002)

hi, werde ich gleich testen aber mit den "_" ?


----------



## Adam Wille (21. Dezember 2002)

Nein, sorry die hat mir komischerweise die Opera eben untergemogelt, weiß auch nicht wo da der Haken dran war, hab's aber eben noch modifiziert. 

Geist


----------



## Trash (21. Dezember 2002)

hmm, ich hab jetzt deine 1. Schreibweise benutzt und es geht trotzdem nicht ...irgendwas stimmt an meinem Code nicht, hier mein ein etwas längerer Ausschnitt: Sorry dafür:


```
<script type="text/javascript" language="JavaScript">
<!--
function seticon(Zeichen) {
    document.action.text.value = document.action.text.value + Zeichen;
}
//-->
</script>
<?
  if(login_right($ID,$Pass)&&rightfornews($ID))
  {
      switch($todo)
      {
          case add:
               if($formaction=="Hinzufügen")
               {
                   if($Titel=="")
                   {
                       TableMessage("Bitte geben sie ein Titel für die News an","Fehlende Eingabe");
                   }
                   else
                   {
                       if($Text=="")
                       {
                           TableMessage("Bitte geben sie ein Text für die News an","Fehlende Eingabe");
                       }
                       else
                       {
                           $Datum=date("Y-m-d H:i:s");
                           mysql_query("INSERT INTO news (Titel,Text,Datum,Poster) VALUES('$Titel','$Text','$Datum','$ID')");
                           TableMessage("News wurde hinzugefügt","News hinzufügen");
                       }
                   }
               }
               else
               {
                   echo("<table border='0' cellpadding='0' cellspacing='1' align='center' bgcolor='#000000'>\n");
                   echo(" <form action='".$PHP_SELF."' method='post'>\n");
                   echo("  <tr>\n");
                   echo("   <td class='InhaltTop' colspan='2'>\n");
                   echo("    <p align='center'>News hinzufügen</p>");
                   echo("   </td>\n");
                   echo("  </tr>\n");
                   echo("  <tr class='Inhalt'>\n");
                   echo("   <td>\n");
                   echo("    Titel\n");
                   echo("   </td>\n");
                   echo("   <td>\n");
                   echo("    <input type='text' size='40' name='Titel'>\n");
                   echo("   </td>\n");
                   echo("  </tr>\n");
                   echo("  <tr class='Inhalt'>\n");
                   echo("   <td>\n");
                   echo("    Text\n");
                   echo("   </td>\n");
                   echo("   <td>\n");
                   echo("    <textarea name='Text' wrap='virtualy' rows='10' cols='40'></textarea>\n");
                   echo("   </td>\n");
                   echo("  </tr>\n");
                   echo("  <tr>\n");
                   echo("   <td class='InhaltBottom' colspan='2' align='center'>\n");
$durchschleifen=array("ID","Pass","section","site","todo");
for($i=0;$i<count($durchschleifen);$i++)
{
echo("<input type='hidden' name='".$durchschleifen[$i]."' value='".$$durchschleifen[$i]."'>\n");
}
echo("<input type='submit' name='formaction' value='Hinzufügen'>\n");
echo("<input type='reset' value='Zurücksetzen'>\n");
echo("   </td>\n");
echo("  </tr>\n");
echo(" </form>\n");
echo("</table>\n");
//break-Hinweis
echo("<p>\n");
echo("<table border='0' cellpadding='0' cellspacing='1' align='center' bgcolor='#000000'>\n");
echo("  <tr>\n");
echo("   <td class='InhaltBottom' colspan='2' align='center'>\n");
echo("Um einen [more]-Link zu erzeugen, setzt bitte den [break] Befehl an die Stelle an der die News unterbrochen werden soll.\n");
echo("   </td>\n");
echo("  </tr>\n");
echo("</table>\n");
//Flaggen-Hnweis
echo("<p>\n");
echo("<table border='0' cellpadding='0' cellspacing='1' align='center' bgcolor='#000000'>\n");
echo("  <tr>\n");
echo("   <td class='InhaltBottom' colspan='2' align='center'>\n");
echo("<a href=\"javascript:seticon('<img src=gif/flag_norwegen.gif alt=NOR border=0>')\"><img src=\"gif/flag_norwegen.gif\" alt=\"NOR\" border=\"0\"></a>\n");
echo("<a href=\"javascript:seticon('<img src=gif/flag_usa.gif alt=USA border=0>')\"><img src=\"gif/flag_usa.gif\" alt=\"USA\" border=\"0\"></a>\n");
echo("<a href=\"javascript:seticon('<img src=gif/flag_sweden.gif alt=SWE border=0>')\"><img src=\"gif/flag_sweden.gif\" alt=\"SWE\" border=\"0\"></a>\n");
echo("<a href=\"javascript:seticon('<img src=gif/flag_brazil.gif alt=BRA border=0>')\"><img src=\"gif/flag_brazil.gif\" alt=\"BRA\" border=\"0\"></a>\n");
echo("   </td>\n");
echo("  </tr>\n");
echo("</table>\n");
//Flaggen-Ende
}
break;
```


----------



## THE REAL TOOLKIT (21. Dezember 2002)

So vielleicht?
echo("<a href=javascript:seticon(\"<img src='gif/flag_norwegen.gif' alt='NOR' border='0'>\")><img src=\"gif/flag_norwegen.gif\" alt=\"NOR\" border=\"0\"></a>\n");


----------



## Adam Wille (21. Dezember 2002)

Trash, es ist einfacher das ganze zu beurteilen, wenn du 

1.
sagst, was es für eine Fehlermeldung gibt, denn "geht nicht" ist ja immer sinnlos...

2.
einfach im letztendlich beim Clienten gelandeten Dokument einfach schaust, welcher Quelltext in einer beliebigen Zeile, die einen Aufruf des JavaScriptes erzwingt, dort vorherrscht und diesen anscheinend fehlerhaften hier mal postest.

Geist


----------



## Trash (22. Dezember 2002)

es kommt ja kein Fehler, das ist es ja


----------



## Adam Wille (22. Dezember 2002)

Sicher?
Man kann das auch gerne so einstellen, dass keine Fehlermeldungen aufpoppen, der IE ist im Grundzustand so konfiguriert...

Ansonsten gilt noch immer:
Bitte einfach mal aus dem Quellcode einer solchen Seite, wenn sie denn schon geparst wurde  eine Zeile posten, die einen JavaScript-Aufruf enthält, bspw. sollte folgende Zeile im PHP-Script ja eine ausgeben, die das macht:

```
echo("<a href=\"java script:seticon('<img src=gif/flag_brazil.gif alt=BRA border=0>')\"><img src=\"gif/flag_brazil.gif\" alt=\"BRA\" border=\"0\"></a>\n");
```
Geist


----------



## Trash (22. Dezember 2002)

```
<script type="text/javascript" language="JavaScript">
<!--
function seticon(Zeichen) {
    document.action.Text.value = document.action.Text.value + Zeichen;
}
//-->
</script>
```

die javaScript funktion steht nicht im Header, muss sie das evtl. ?
beides stammt aus der geparsten Datei.


```
<a href="javascript:seticon('<img src=gif/flag_norwegen.gif alt=NOR border=0>')"><img src="gif/flag_norwegen.gif" alt="NOR" border="0"></a>
```

document.action.Text.value

"Text" schreib ich gross weil meine textarea den namen "Text" hat muss ich denn sonst bei dem obigen Befehl noch etwas anpassen `?

UPDATE:
Ich habe gerade von einem Freund erfahren das bei ihm soetwas kommt:
Laufzeitfehler Zeile 305 document.action.Text ist null oder kein Objekt.
Wie bekomme ich denn das nun wieder weg und wieso zeigt mein IE das nicht an kann ich das nicht irgendwo einstellen ?


----------



## THE REAL TOOLKIT (22. Dezember 2002)

Action muss dem Namen der Form entsprechen. (<form name="bla">)


----------



## Trash (22. Dezember 2002)

nun funkt es ! DANKE !


----------



## Adam Wille (22. Dezember 2002)

Ich sag' doch, nicht alles was kein Fehlerfenster öffnet, ist kein Fehler!

Im IE:
Extras -> Internetoptionen -> Erweitert -> Skriptfehler anzeigen aktivieren

dann klappt's auch mit den Fehlermeldungen - ansonsten solltest du für sowas evtl. immer einen Netscape-Browser zur Hand haben, denn die haben für sowas Konsolen, die präziser arbeiten.

Bei solch einer Fehlermeldung kannst du immer davon ausgehen, dass ein Objekt, welches du zu referenzieren versuchst, nicht im Dokument existiert - denn genau dann hat es den Wert _null_: wenn eine Variable, die ein Objekt referenzieren soll, *keinen* Inhalt besitzt und damit auf *kein* Objekt verweist.

Und dann sollte es immer heißen - Namensattribute aller verwendeten HTML-Elemente prüfen.

hth,
Geist


----------

