# OnClick -> zurück



## d4k4 (15. Oktober 2002)

jo also mit 


```
function produkt()
{
document.form.text.value = document.form.text.value + 'Produkt1 ';
}
function produkt1()
{
document.form.text.value = document.form.text.value + 'Produkt2 ';
}
function produkt2()
{
document.form.text.value = document.form.text.value + 'Produkt3 ';
}
function produkt3()
{
document.form.text.value = document.form.text.value + 'Produkt4 ';
}
function produkt4()
{
document.form.text.value = document.form.text.value + 'Pordukt5 ';
}
```

füg ich smilies in ein textfeld ein. jetzt hätt ich gern, das man bei erneutem klicken auf den smilies ihn wieder aus dem textfeld entfernt. gibt es da möglichkeiten?


----------



## Adam Wille (15. Oktober 2002)

a)

```
function produkt()
{
document.form.text.value += 'Produkt1';
}
function produkt1()
{
document.form.text.value += 'Produkt2 ';
}
function produkt2()
{
document.form.text.value += 'Produkt3';
}
function produkt3()
{
document.form.text.value += 'Produkt4 ';
}
function produkt4()
{
document.form.text.value += 'Produkt5';
}
```
ist die gekürzte gleiche Variante. 

b)
Kannst du mit einem Counter realisieren... 

```
<script type="text/javascript">
<!--
function produkt() {
    if (!count) {
        document.form.text.value += 'Produkt1';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt1';
        delete count;
    }
}
function produkt1() {
    if (!count) {
        document.form.text.value += 'Produkt2';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt2';
        delete count;
    }
}
function produkt2() {
    if (!count) {
        document.form.text.value += 'Produkt3';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt3';
        delete count;
    }}
function produkt3() {
    if (!count) {
        document.form.text.value += 'Produkt4';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt4';
        delete count;
    }
}
function produkt4() {
    if (!count) {
        document.form.text.value += 'Produkt5';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt5';
        delete count;
    }
}
//-->
</ script>
```
(</ script> bitte zusammen)

Sollt hoffentlich so klappen...

hth,
Geist


----------



## d4k4 (15. Oktober 2002)

er sagt mit das count nicht definiert ist ( hat er ja recht  )?


----------



## Adam Wille (15. Oktober 2002)

Dachte eigentlich, dass das so gezielt interpretiert werden würde, kann aber auch sein, dass ich da Flash-Angewohnheiten und JavaScript-Usus ein wenig zu sehr aneinanderbringe. 

Dann mach jeweils mal

```
var count = ...;
```
Also überall, aber vor den delete-Befehlen kannst du dir's sparen...

Das sollte restliche Unklarheiten für den Interpreter ausmerzen...hoffe ich. 

Geist


----------



## d4k4 (16. Oktober 2002)

das funktinoniert auch nicht  
wenn ich var count mache, dann nimmt er es bei nochmaligem klicken nicht wieder zurück


----------



## THE REAL TOOLKIT (16. Oktober 2002)

hmn,arbeite doch einfach mit counter=1 oder counter=0
da kann dann nix schief gehen
function produkt1() {
    if (count == 0) {
        document.form.text.value += 'Produkt2';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt2';
        count = 0;
    }
}
villeicht sollte count auch noch unterschiedliche Namen kriegen,sonst werden die falschen smilies entfernt


----------



## d4k4 (17. Oktober 2002)

so ich habs jetzt so 


```
<script language="JavaScript">

count = 0;

function produkt() {
    if (count == 0){
        document.form.text.value += 'Produkt1';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt1';
        count = 0;
    }
}
function produkt1() {
    if (count == 0){
        document.form.text.value += 'Produkt2';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt2';
        count = 0;
    }
}
function produkt2() {
    if (count == 0){
        document.form.text.value += 'Produkt3';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt3';
        count = 0;
    }
}
function produkt3() {
    if (count == 0){
        document.form.text.value += 'Produkt4';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt4';
        count = 0;
    }
}
function produkt4() {
    if (count == 0){
        document.form.text.value += 'Produkt5';
        count = 1;
    } else if (count == 1) {
        document.form.text.value -= 'Produkt5';
        count = 0;
    }
}
```

wenn ich jetzt einmal klicke macht er ihn rein, und wenn ich nochmal klicke macht er ihn wieder raus.
ABER! 
Er überschreit den text in der textarea mit NaN? was bedeutet das denn?


----------



## THE REAL TOOLKIT (17. Oktober 2002)

NaN heißt Not a Number
warum dieser Fehler da kommt weiß ich auch nicht. 
Er taucht meistens auf wenn du eine Rechenoperation ausführst und "Wort + 5" rechnen willst
Aber Geist wirds schon wissen


----------



## d4k4 (17. Oktober 2002)

jo geist...?
*hoff*


----------



## Adam Wille (17. Oktober 2002)

Argh, da müssen wir hier wohl was korrigieren. 

Also entgegen meiner Vermutung, dass String-Teile mit "-=" entfernt werden können, ist eine Umkehrung des Konkatenationsoperators "+", bzw. "+=" für Strings nicht vorhanden, so dass es also nicht möglich ist, den hinzugeschriebenen Stringteil wieder so einfach zu entfernen.

Schätze, dass dazu dann doch eher mit Substrings gearbeitet werden muss...oder aber du speicherst, bevor du deinen Text nach dem ersten Klick einfügst, den vorigen Text ab und beim "Löschen" (Zweitklick) stellst du den eben wieder her.

hth,
Geist


----------



## d4k4 (18. Oktober 2002)

ahja  
muss ich wohl doch paar javascript bücher wälzen


----------



## Adam Wille (18. Oktober 2002)

Wenn du's selbst begreifen willst, dann vielleicht ja, aber nimm' doch bspw. folgendes Script:

```
<script type="text/javascript">

count = 0;

function produkt() {
    if (count == 0){
	previous = document.form.text.value;
        document.form.text.value += 'Produkt1';
        count = 1;
    } else if (count == 1) {
        document.form.text.value = previous;
        count = 0;
    }
}
function produkt1() {
    if (count == 0){
	previous = document.form.text.value;
        document.form.text.value += 'Produkt2';
        count = 1;
    } else if (count == 1) {
        document.form.text.value = previous;
        count = 0;
    }
}
function produkt2() {
    if (count == 0){
	previous = document.form.text.value;
        document.form.text.value += 'Produkt3';
        count = 1;
    } else if (count == 1) {
        document.form.text.value = previous;
        count = 0;
    }
}
function produkt3() {
    if (count == 0){
	previous = document.form.text.value;
        document.form.text.value += 'Produkt4';
        count = 1;
    } else if (count == 1) {
        document.form.text.value = previous;
        count = 0;
    }
}
function produkt4() {
    if (count == 0){
	previous = document.form.text.value;
        document.form.text.value += 'Produkt5';
        count = 1;
    } else if (count == 1) {
        document.form.text.value = previous;
        count = 0;
    }
}
</ script>
```
(</ script> zusammen)

hth,
Geist


----------



## d4k4 (18. Oktober 2002)

jo klappt. zwar nicht 100% aber wenigstens 80%  
danke nochmal


----------



## Adam Wille (18. Oktober 2002)

Wir können auch die komplexere Variante durchkauen, in welcher der gesamte String auseinandergenommen wird, bzw. nach "" durchsucht wird...

Oder was meinst du mit "keine 100%"?

Geist


----------



## d4k4 (18. Oktober 2002)

ich mein damit, dass wenn ich produkt 1 stehen hab, 2 mal auf produkt 2 klicken muss, damit 2 drinsteht. besser wär natürlich mit einem klick löschen und einfügen. aber so ist mir auf jeden fall auch geholfen


----------



## Dario Linsky (18. Oktober 2002)

das hat zwar jetzt nicht wirklich was mit diesem thema zu tun, aber soll auch nur ein kleiner verbesserungsvorschlag sein.
wieso definierst du count nicht einfach als boolesche variable? damit könnte man den code noch etwas abkürzen.

anstelle von

```
if (count == 0)
{
    // ...
    count = 1;
} else if (count == 1) {
    // ...
    count = 0;
}
```

würde das ganze dann so aussehen:

```
if (!count)
{
    // ...
} else {
    // ...
}
count = !count;
```


aber das auch nur so am rande.


----------



## Adam Wille (18. Oktober 2002)

Joa asphyxia, Recht hast du, hatte damals nur vergessen, das "count" vorher im Script einzuführen, daher war's undefiniert... 

Hab' das Script jetzt mal weitestgehend gekürzt und dabei ist folgendes Beispiel einer HTML-Seite rausgekommen:

```
<html>
<head>
<script type="text/javascript" language="JavaScript">
<!--
var count;

function produkt(num) {	
    if (!count) {
	previous = document.form.text.value;
        document.form.text.value += "Produkt" + num;
        count = 1;
    } else if (count) {
        document.form.text.value = previous;
	document.form.text.value += "Produkt" + num;
    }
}
//-->
</script>
<title>Blubb</title>
</head>
<body>
<form name="form">
<input type="text" name="text">
</form>
<a href="javascript: produkt(1);">1</a>
<a href="javascript: produkt(2);">2</a>
<a href="javascript: produkt(3);">3</a>
<a href="javascript: produkt(4);">4</a>
<a href="javascript: produkt(5);">5</a>
</body>
</html>
```
(zwischen "javascript:" und "produkt..." das Leerzeichen muss natürlich weg )
Denke mal, das ist die kürzeste und codesparendste Variante. 

Bei Fragen fragen...

hth,
Geist


----------



## d4k4 (21. Oktober 2002)

auch gut  
nur kann ich ja jetzt nur noch 1 smilie setzen


----------



## Adam Wille (21. Oktober 2002)

Hö?

Ja genau das wolltest du imo doch die ganze Zeit haben, dass mit einem Klick der vorige Smilie rausgenommen wird und der aktuelle dafür reingesetzt wird...!?

Erklär disch,
Geist


----------



## d4k4 (21. Oktober 2002)

jo aber trotzdem soll man doch mehrer smilies posten können


----------



## Adam Wille (21. Oktober 2002)

Also wenn man auf nen Button klickt, soll der letzte gesetzte Smilie entfernt und ersetzt werden, falls er an letzter Stelle der Eingabe steht, und ansonsten soll, wenn also die letzte Eingabe kein Smilie war, ein neuer hinzugefügt werden?

Geist


----------



## d4k4 (21. Oktober 2002)

auch wenn die letzte eingabe ein smile war soll trotzdem ein smile gesetzt werden können


----------



## Adam Wille (21. Oktober 2002)

Boah, das übersteigt echt meine gesamten Verständniskünste... 

Wofür soll denn dann das mit dem Löschen sein?
Nur wenn der gleiche Smilie nochmal gedrückt wird?

Geist,
der dir echt gern helfen würde, wenn er endlich begreifen würde wie's genau enden soll


----------



## d4k4 (21. Oktober 2002)

zerbrech dir nicht den kopf  
du hast schon gengug getan. reicht doch so


----------



## Adam Wille (21. Oktober 2002)

Shice Ehrgeiz... 

Mein kompletter Nickname ist doch "Geisti Theresa", da komm' ich um's helfen nicht drumrum. 

Geist

P.S.: .....und jetzt sag endlich, wie's aussehen soll, damit ich weiterbasteln kann.


----------



## d4k4 (22. Oktober 2002)

ok nochmal, aber nur weil du sonst keine ruhe gibst  

1. Click = Smilie rein
2. Click = Smile wieder raus und anderes rein ( aber trotzdem soll man mehrere Smilies setzen können ) 

jo das ist eigentlich alles.


----------



## d4k4 (25. Oktober 2002)

nochmal was anderes


```
<html>
<head>
<script type="text/javascript" language="JavaScript">
<!--
var count;

function produkt(num) {	
    if (!count) {
	previous = document.form.text.value;
        document.form.text.value += "Produkt" + num;
        count = 1;
    } else if (count) {
        document.form.text.value = previous;
	document.form.text.value += "Produkt" + num;
    }
}
//-->
</script>
<title>Blubb</title>
</head>
<body>
<form name="form">
<input type="text" name="text">
</form>
<a href="java script: produkt(1);">1</a>
<a href="java script: produkt(2);">2</a>
<a href="java script: produkt(3);">3</a>
<a href="java script: produkt(4);">4</a>
<a href="java script: produkt(5);">5</a>
</body>
</html>
```

wenn ich das so mache, woe kann ich dann die namen ändern. also z.b Produkt = Eiscreme, Produkt2 = Wurst usw. ?


----------



## Adam Wille (25. Oktober 2002)

Sicherlich am einfachsten, indem du den Inhalt, der dazukommen soll, als Parameter mit übergibst - dann brauchst du aber logischerweise nicht mehr den anderen Parameter:

```
<html>
<head>
<script type="text/javascript" language="JavaScript">
<!--
var count;

function produkt(val) {    
    if (!count) {
    previous = document.form.text.value;
        document.form.text.value += val;
        count = 1;
    } else if (count) {
        document.form.text.value = previous;
    document.form.text.value += val;
    }
}
//-->
</ script>
<title>Blubb</title>
</head>
<body>
<form name="form">
<input type="text" name="text">
</form>
<a href="java script: produkt("Wurst");">1</a>
<a href="java script: produkt("Käse");">2</a>
<a href="java script: produkt("Senf");">3</a>
<a href="java script: produkt("Butter");">4</a>
<a href="java script: produkt("d4k4");">5</a>
</body>
</html>
```
(</ script> wie immer zusammen )

hth,
Geist


----------



## d4k4 (25. Oktober 2002)

*nervmode an*
er sagt mir das dann wurst, usw undefiniert seine  
*nervmode aus*


----------



## Adam Wille (25. Oktober 2002)

Sorry, blöder Flüchtigkeitsfehler. 

Die Strings, die du als Parameter übergeben willst, müssen natürlich in Hochkommas gesetzt werden, nicht in Anführungszeichen...

Geist


----------



## d4k4 (25. Oktober 2002)

ahja danke mein retter in der not


----------



## d4k4 (28. Oktober 2002)

nochmal ne bonus frage :
wie mach ich das am besten, wenn ich z.b. wurst UND creme ins textfel haben will ^^


----------



## THE REAL TOOLKIT (28. Oktober 2002)

am besten die funktion so einrichten dass du die möglichkeit hast zwei parameter zu übergeben: function produkt(val,va2)
document.form.text.value += va2;


----------



## d4k4 (28. Oktober 2002)

sorry hab mich falsch ausgedrückt

ich will nich 2 variablen auf einmal übergeben, sondern 2 nacheinander. also dass sie im textfeld anneinader gehängt werden


----------



## THE REAL TOOLKIT (28. Oktober 2002)

Die werden dann doch auch nacheinander inx Textfeld geschrieben
du kannst die Funktion natürlich auch doppelt aufrufen
aber ob das so schön ist?

oclick="produkt('wert1'),produkt('wert2')"


----------



## d4k4 (29. Oktober 2002)

naja aber rückblickend auf das was ghost geschrieben hat, müsst ich ja im prinzip 1 smilie haben, das dann die variable vom ersten und vom zweiten verschicken kann


----------



## Adam Wille (29. Oktober 2002)

Versteh' jetzt das letzte Posting nicht so ganz, aber was ist daran so schwer, in der Parameterübergabe einfach den String so abzuändern, dass beide Begriffe drin auftauchen?

```
<a href="java script: produkt('Wurst Käse');">1</a>
```
Oder warum steh' ich jetzt auf'm Schlauch? 

Geist


----------



## d4k4 (29. Oktober 2002)

na keiner versteht mich  
ich will doch nicht mit einem klick 2 smilies setzen sondern mit 2 klicks 2 smilies setzen, also die smilies anfügen können

wie gesagt hab mich wohl falsch ausgedrückt


----------



## Adam Wille (29. Oktober 2002)

Aso, alles klar.

Und woher soll der Browser dann wissen, wann er den vorigen Smilie löschen und ersetzen soll und wann er den vorigen Smilie lassen und den zweiten anhängen soll?

Oder willst du jetzt gar nimmer den Effekt mit dem löschen?

Geist


----------



## d4k4 (29. Oktober 2002)

°°
doch das mit dem löschen ist auf jeden fall unersetzbar
ich stell mir das so vor :
ich hab sagen wir 6 links. wenn ich zum erstenmal auf 1 klicke soll der smilie gestezt werden. wenn ich auf den 2 klicke soll der 2 angefügt werden usw. wenn ich auf einen link klicke der schon gestezt ist( da kann ich ja wieder mit counter arbeiten ) soll dann der entssprechende smilie wieder entfernt werden, aber wirklich nur der und auch an der position an der er gesetzt worden ist.

gibt es vielieicht eine möglichkeit die zeilen in einer textarea direkt anzusprechen?

geht das überhaupt mit js so wie ich mir das vorstelle?


----------



## Adam Wille (29. Oktober 2002)

Nujo, stell's mir nicht so einfach vor, gesetzte Smilies, die irgendwo im Text sind, nachträglich noch zu entfernen, dann müsste ja wirklich schon mit schwererem Gerät aufgefahren werden und der String auseinandergenommen werden und eben gecheckt werden, ob irgendwo zwei Schriftzeichen hintereinander liegen, die zusammen einen Smilie ergeben würden.

Dann könnte man die entsprechenden Schriftzeichen rausnehmen und hintendran hängen.

Zeilen direkt anzuwählen ist afaik nicht machbar...

Geist


----------



## d4k4 (29. Oktober 2002)

oki dann lassen wirs


----------



## Adam Wille (29. Oktober 2002)

Hehe, so klappt's 

```
<html>
<head>
<script type="text/javascript" language="JavaScript">
<!--
var t, tr;

function checksmilie(val) {
	t = document.form.text.value;
	tr = t.replace(val, "");
	if (tr != t) {
		return true;
	} else {
		return false;
	}
}

function produkt(val) {
	if (checksmilie(val)) {
		document.form.text.value = tr;
	} else if (!checksmilie(val)) {
		document.form.text.value += val;
	}
}
//-->
</ script>
<title>Smilies</title>
</head>
<body>
<form name="form">
<input type="text" name="text">
</form>
<a href="javascript: produkt('bla ');">1</a>
<a href="javascript: produkt('blo ');">2</a>
<a href="javascript: produkt('ble ');">3</a>
<a href="javascript: produkt('bli ');">4</a>
<a href="javascript: produkt('blu ');">5</a>
</body>
</html>
```
have phun,
Geist


----------



## d4k4 (29. Oktober 2002)

hammer !
ab sofort bist du mein persönlicher gott


----------

