text an array mit value anhängen
centauro
- javascript
Hallo Forum,
ich habe mal aus diesem Forum folgendes Script herauskopiert und wollte auf meine Bedürfnisse anpassen.
Dieses Script erlaubt mir per Checkbox einen vordefinierten Text in ein Array zu schreiben und diesen Text anschliessend an eine Textarea zu übergeben.
Nimmt man die Checkbox-Häkchen wieder raus, dann wird der richtige Textabschnitt wieder aus der Textarea rausgelöscht.
Dieses Script habe ich etwas erweitert und zwar mit einer prompt-box, in der ich den vordefinierten Text quasi erweitern kann. Diese Texterweiterung wird quasi an den vordefinierten Textabschnitt angehangen, in das array geschrieben und an die Textarea übergeben. Das funktioniert auch soweit.
Allerdings soll das Script den gesamten Textabschitt inklusive der Erweiterung wieder aus der Textarea herausnehmen, wenn ich das entsprechende Häkchen wieder entferne.
Das funktioniert wiederum nicht.
Nun an dieser Stelle wollte ich hier mal freundlich in diesem Forum fragen, ob mir jemand weiterhelfen kann. Das wäre toll. Ich habe schon vieles probiert und bin gescheitert.
Es wäre klasse, wenn mir jemand nen Hinweis geben kann.
Ich habe das gesamte Script inklusive HTML-Checkboxen zum ausprobieren mal angehangen. Sollte es jemand erweitern können, so wäre ich diesem sehr dankbar.
Anbei das Script:
<html>
<head>
<title></title>
<script type="text/javascript">
<!--
var daten = new Array();
i = 0;
function treffe_auswahl(auswahl)
{
if (auswahl.checked) {
var extendedtext = prompt(auswahl.value, '');
neuer_string = auswahl.value + extendedtext;
daten.push(neuer_string + "\n\n");
}
else
{
while (i < daten.length)
{
//auswahl.value+extendedtext.value
if (daten[i] == neuer_string+"\n\n")
daten.splice(i, 1)+"\n\n";
i++;
alert(daten.indexOf(daten));
}
}
daten.sort();
document.getElementById('traceLine').value = daten+"\n\n";
}
//-->
</script>
</head>
<body>
<form>
<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr><td>
<label for="vorne_rechts"><input name="vorne_rechts" id="vorne_rechts" type="checkbox" title="Vorne rechts" value="Ene mene miste, es rappelt in der... " onclick="treffe_auswahl(this)"></label></td>
<td width="200"> </td><td width="300" align="center">
<label for="rechte_fahrzeugseite"><input name="rechte_fahrzeugseite" id="rechte_fahrzeugseite" type="checkbox" title="Rechte Fahrzeugseite" value="Alle meine Entchen, schwimmen auf dem See, Köpfchen in das Wasser.. " <?php echo ($rechte_fahrzeugseite=="Ja") ? "CHECKED" : "" ?> onclick="treffe_auswahl(this)"></label></td>
<td>
<label for="hinten_rechts"><input name="hinten_rechts" id="hinten_rechts" type="checkbox" title="Hinten rechts" value="Oh Tannenbaum, oh Tannenbaum ... " <?php echo ($hinten_rechts=="Ja") ? "CHECKED" : "" ?> onclick="treffe_auswahl(this)"></label></td></tr>
</table>
</form>
</body>
</html>
Bin übrigens sehr schwach in Javascript. Habe also noch nicht so viel in JS gemacht.
Besten Dank und viele Grüße,
Centauro
Anbei das Script:
Das so nicht funktioniert, es ist nicht erkennbar was du überhaupt möchtest.
Aber wenn ich dich richtig verstanden habe, ist hiere dein Problem:
{
while (i < daten.length)
{
//auswahl.value+extendedtext.value
if (daten[i] == neuer_string+"\n\n")
daten.splice(i, 1)+"\n\n";
i++;
alert(daten.indexOf(daten));
}
Mir ist nicht klar was du mit diesem Code erreichen möchtest. Warum immer dieser doppelte Zeilenumbruch? Dann ist die while Schleife nicht so glücklich, da du i dann immer von Hand auf Null setzten musst.
Funktioniert nicht, ist keine Fehlerbeschreibung. Besser ist es, wenn du beschreibst was passiert und was passieren sollte.
Struppi.
Hi Struppi,
vielen Dank für Dein Posting.
Also folgendes:
Was das Script tut:
Das script fängt den value eines in einer HTML-Checkbox hinterlegten Textabschnitt (der unvollständig und fix ist) ab und schreibt diesen in eine vorgegebene Textarea rein. Setzt man ein Häkchen in eine Checkbox, so erscheint zunächst ein Prompt-Fenster, welches erlauben soll den vorgegebenen Textabschnitt nach belieben zu erweitern. Im Anschluss nach Klick auf den OK-Button wird der im Value hinterlegte und der in dem Prompt-Fenster eingegebene Text zusammen in die Textarea reingeschrieben, wobei noch zwei Zeilenumbrüche folgen.
Mein Original-Script enthält insgesamt 10 Checkboxen. Hier in diesem Beispiel sind nur 3, weil ich den Rahmen nicht sprengen wollte. Das wäre zuviel des Guten. Daher hier in diesem Beispiel nur 3 Checkboxen.
Die Zeilenumbrüche folgen deshalb, weil das Script mehrere Checkboxen verarbeiten soll.
Im Klartext:
Ich kann mehrere Checkboxen anklicken. Jede Checkbox enthält einen anderen Text und bei jedem setzen eines Häkchens erscheint die Prompt-Box, in dem ich den hinterlegten Text weiter ausschreiben kann.
Die Textabschnitte erscheinen untereinander in der Textarea.
Das funktioniert alles über den Array.
Das Abhaken der Checkboxen:
Nehme ich das Häkchen wieder von einer beliebigen Checkbox wieder heraus, so verschwindet wieder der in dieser Checkbox im Value hinterlegte Text und auch der in der entsprechend in der Prompt-Box eingegebenen Text.
Der Fehler der in diesem Script steckt:
Das Script nimmt leider beim herausnehmen eines Häkchens einer beliebigen Checkbox immer nur den letzten in der Textarea erschienene Eintrag heraus. Alle anderen Checkboxen reagieren nicht. Leider weiss ich auch nicht warum.
Was soll das Script tun:
Das Script soll mir erlauben beim Abhaken einer beliebigen Checkbox eine Prompt-Box zu öffnen, einen Text einzugeben. Beim Klick auf den OK-Button sollen beide Texte zusammen (quasi ist es dann nur ein zusammengesetzter Text) in die Textarea reingeschrieben werden.
Das soll mit jeder Checkbox möglich sein.
Wenn ich feststelle, dass ich eine Checkbox zuviel habe, dann soll es möglich sein das Häkchen der entsprechenden Checkbox zu entfernen und der entsprechende Textabschnitt (Value-Text und Prompt-Box Text) sollen dann aus der Textarea verschwinden.
Auch wenn ich eine Checkbox zu wenig angeklickt habe soll es möglich sein eine weitere Checkbox anzuklicken um den entsprechend hinterlegten Text mit dem eingegebenen Text in der Prompt-Box in die Textarea reinzulegen.
Die einzelnen Textabschnitte sollen durch zwei Zeilenumbrüche in der Textarea voneinander getrennt sein, damit man sie erkennen kann.
Das ist alles.
Hoffe das ist verständlich! :-)
Vielen Dank nochmal für deine Hilfe.
Viele Grüße,
Centauro
Anbei das Script:
Das so nicht funktioniert, es ist nicht erkennbar was du überhaupt möchtest.
Aber wenn ich dich richtig verstanden habe, ist hiere dein Problem:
{
while (i < daten.length)
{
//auswahl.value+extendedtext.value
if (daten[i] == neuer_string+"\n\n")
daten.splice(i, 1)+"\n\n";
i++;
alert(daten.indexOf(daten));
}Mir ist nicht klar was du mit diesem Code erreichen möchtest. Warum immer dieser doppelte Zeilenumbruch? Dann ist die while Schleife nicht so glücklich, da du i dann immer von Hand auf Null setzten musst.
Funktioniert nicht, ist keine Fehlerbeschreibung. Besser ist es, wenn du beschreibst was passiert und was passieren sollte.
Struppi.
vielen Dank für Dein Posting.
Kein Problem, aber eine Bitte: zitiere nur das, worauf sich deine Antwort bezieht und mache kein TOFU.
Mein Original-Script enthält insgesamt 10 Checkboxen. Hier in diesem Beispiel sind nur 3, weil ich den Rahmen nicht sprengen wollte. Das wäre zuviel des Guten. Daher hier in diesem Beispiel nur 3 Checkboxen.
Leider enthält das Beispiel PHP Code und keine Textarea, d.h. das Beispiel ist wie schon erwähnt nicht lauffähig. Ein Beispiel sollte übersichtlich sein und lauffähig, beides erfüllt dein Code nicht.
Ich hab mir mal die Mühe gemacht deinen Code entsprechend zu bearbeiten:
<form>
<p>
<input type="checkbox" value="Ene mene miste, es rappelt in der... " onclick="treffe_auswahl(this)">
<input type="checkbox" value="Alle meine Entchen, schwimmen auf dem See, Köpfchen in das Wasser.. " onclick="treffe_auswahl(this)">
<input type="checkbox" value="Oh Tannenbaum, oh Tannenbaum ... " onclick="treffe_auswahl(this)">
<br><textarea cols=20 rows=10 id="traceLine"></textarea>
</p>
</form>
<script type="text/javascript">
var daten = new Array();
function treffe_auswahl(auswahl) {
if (auswahl.checked) {
var neuer_string = auswahl.value + prompt(auswahl.value, '');
daten.push(neuer_string);
} else {
for (var i = 0; i < daten.length; i++)
if (daten[i].indexOf(auswahl.value) > -1) daten.splice(i, 1);
}
daten.sort();
document.getElementById('traceLine').value = daten.join('\n\n');
}
~~~~~~html
</script>
Struppi.
Hi!
Herzlichen Dank für Deine Hilfe. :-)
Ich werde deine Bitte selbstverständlich für die Zukunft beherzigen.
Das Script funktioniert aber eine Frage noch zur sort-Funktion.
Gibt es eine Funktion die mir den ersten angefügten Textabschnitt auch an erster Stelle in der Textarea erscheinen lässt?
Die sort-Funktion sortiert falsch herum.
Danke nochmals.
Centauro
vielen Dank für Dein Posting.
Kein Problem, aber eine Bitte: zitiere nur das, worauf sich deine Antwort bezieht und mache kein TOFU.
Mein Original-Script enthält insgesamt 10 Checkboxen. Hier in diesem Beispiel sind nur 3, weil ich den Rahmen nicht sprengen wollte. Das wäre zuviel des Guten. Daher hier in diesem Beispiel nur 3 Checkboxen.
Leider enthält das Beispiel PHP Code und keine Textarea, d.h. das Beispiel ist wie schon erwähnt nicht lauffähig. Ein Beispiel sollte übersichtlich sein und lauffähig, beides erfüllt dein Code nicht.
Ich hab mir mal die Mühe gemacht deinen Code entsprechend zu bearbeiten:
<form>
<p>
<input type="checkbox" value="Ene mene miste, es rappelt in der... " onclick="treffe_auswahl(this)">
<input type="checkbox" value="Alle meine Entchen, schwimmen auf dem See, Köpfchen in das Wasser.. " onclick="treffe_auswahl(this)">
<input type="checkbox" value="Oh Tannenbaum, oh Tannenbaum ... " onclick="treffe_auswahl(this)">
<br><textarea cols=20 rows=10 id="traceLine"></textarea>
</p>
</form>
<script type="text/javascript">
> ~~~javascript
var daten = new Array();
> function treffe_auswahl(auswahl) {
> if (auswahl.checked) {
> var neuer_string = auswahl.value + prompt(auswahl.value, '');
> daten.push(neuer_string);
> } else {
> for (var i = 0; i < daten.length; i++)
> if (daten[i].indexOf(auswahl.value) > -1) daten.splice(i, 1);
> }
> daten.sort();
> document.getElementById('traceLine').value = daten.join('\n\n');
> }
>
~~~~~~html
</script>
>
Struppi.
Ich werde deine Bitte selbstverständlich für die Zukunft beherzigen.
Kein Problem, aber eine Bitte: zitiere nur das, worauf sich deine Antwort bezieht und mache kein TOFU.
Dann tu das doch auch.
Die Funktion http://de.selfhtml.org/javascript/objekte/array.htm#sort@title=sort hat keine Auswirkungen auf das aktuelle Array, sondern gibt das sortierte Array zurück. aber eine Funktion kann natürlich nicht raten welchen Sortieralgorithmus du benutzen möchtest. Wenn du einfach nur die umgekehrte Reihenfolge haben möchtest, musst du einfach die entsprechende Funktion anwenden.
Struppi.
Hab ich!
Da keine Sortierung notwendig ist, habe ich die sort() Funktion einfach rausgenommen. :-)
Vielen Dank für Deine Hilfe.
Wünsche Dir noch einen schönen Abend.
Bis bald,
Centauro
Ich werde deine Bitte selbstverständlich für die Zukunft beherzigen.
Kein Problem, aber eine Bitte: zitiere nur das, worauf sich deine Antwort bezieht und mache kein TOFU.
Dann tu das doch auch.
Die Funktion http://de.selfhtml.org/javascript/objekte/array.htm#sort@title=sort hat keine Auswirkungen auf das aktuelle Array, sondern gibt das sortierte Array zurück. aber eine Funktion kann natürlich nicht raten welchen Sortieralgorithmus du benutzen möchtest. Wenn du einfach nur die umgekehrte Reihenfolge haben möchtest, musst du einfach die entsprechende Funktion anwenden.
Struppi.