You are not logged in.

wcf.regNote.message

Snoopy

Trainee

  • "Snoopy" started this thread

Posts: 57

  • Send private message

1

Friday, April 16th 2004, 1:16pm

Text ändern mit onclick ?

Nächste Frage:

Ich habe ein Template XHTML (7 x <td>) und in einem befindet sich eine Checkbox. Ich möchte nun wenn diese angeklickt wird die Texte in den anderen <td>'s ändern. Ist das machbar über Java und wenn ja wie ?

Bsp:
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr id="row$value" class="$class2" onmouseover="this.className='$class1';" onmouseout="this.className='$class2';" ondblclick="javascript:newAction();">
<td style="width: 1%" align="center">
&nbsp;<img src="images/sysmail/actions1.gif" />
</td>
<td style="width: 1%" align="center">
<input type="checkbox" name="empty$value" id="empty" value="$value" />
</td>
<td style="width: 1%" align="center">
$urgendimg
</td>
<td align="left">
<span class="smallfont">&nbsp;$title</span>
</td>
<td style="width: 10%" align="left">
<span class="smallfont">$faellig</span>
</td>
<td style="width: 15%" align="left">
<span class="smallfont">$aufwand</span>
</td>
<td style="width: 15%" align="left">
<span class="smallfont">$status</span>
</td>
</tr>
</table>

Der Wert "$value" wird vom php übergeben 0-30.
Die Texte "$faellig, $aufwand, $status" (kommen auch von der php) und sollen beim anklicken der Checkbox durchgestrichen sein (<strike>....</strike>).

mfg.
Snoopy

Prometheus

Administrator

Posts: 3,278

  • Send private message

2

Friday, April 16th 2004, 1:48pm

jep das geht mit java und auch nur mit java da nur java clienseitig abläuft.
du mußt ne funktion erstellen die dir die tabelle neu aufbaut beim aktivieren und die ursprüngliche wieder herstellt wenn die checkbox deaktiviert wird.
schau dazu mal ---> HIER

einen hab ich noch ... is vielleicht was einfacher

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script language="JavaScript">
function skip () {
  this.blur();
}
function toggleField (field) {
  if (document.all || document.getElementById)
    field.readOnly = !field.readOnly;
  else if (field.onfocus)
    field.onfocus = null
  else field.onfocus = skip;
}
</script>

<form name="formName">
<input type="button" value="enable/disable" ONCLICK="toggleField(document.formName.fieldName);">
<input type="text" name="fieldName" value="jswelt.de">
</form>
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Snoopy

Trainee

  • "Snoopy" started this thread

Posts: 57

  • Send private message

3

Friday, April 16th 2004, 5:40pm

Also habe da nun 2 Stunden rumngesucht und gebastelt aber nix will 100%ig zum Erfolg führen.

Habe also mein Template geändert (hier mal ein Auszug):

<td style="width: 1%" align="center">
<input type="checkbox" name="empty$value" id="empty" value="$value" onclick="if (this.checked==true) changetext1($value);" />
</td>
<td style="width: 1%" align="center">
$urgendimg
</td>
<td align="left" id="text1$value">
<span class="smallfont">&nbsp;$title</span>
</td>
<td style="width: 10%" align="left" id="text2$value">
<span class="smallfont">$faellig</span>
</td>
<td style="width: 15%" align="left" id="text3$value">
<span class="smallfont">$aufwand</span>
</td>

Zum anderen habe ich eine Funktion geschrieben changetext1:

function changetext1(value) {
var txtid1 = "text1" + value;
var textkn1 = document.createTextNode("hallo");
document.getElementById(txtid1).replaceChild(textkn1, document.getElementById(txtid1).firstChild);
}

Also wird die Checkbox angeklickt, ändert sich mein Text in "hallo" - soweit so gut.
Fakt ist aber, das mein Text innerhalb eines <span> erfolgt. und dieser SPAN wird gelöscht (bistimmt durch "firstChild").
Ich kann aber keine HTML in "createTextNode" einfügen.

Wie gesagt, ich muss aus:
<span class="smallfont>Haha</span>
dieses machen:
<span class="smallfont><strike>Haha</strike></span>

Wobei "Haha" hier ein Wert ist, der von pHp herkommt - also immer anders.

Snoopy

Trainee

  • "Snoopy" started this thread

Posts: 57

  • Send private message

4

Friday, April 16th 2004, 6:37pm

oki, ein Fehler weniger.
Habe nun die ID in den <span> gesetzt. Damit ist der Text zumindest klein. Aber eine "<strike>" kann ich nicht einfügen.

Prometheus

Administrator

Posts: 3,278

  • Send private message

5

Friday, April 16th 2004, 10:10pm

ich glaub irgendwie nicht das du das mit <strike> machen kannst da du dazu als beispiel die variable mit dem inhalt verändern müsstest und dann <strike> an den anfang setzen oder so. dann wird aber das ganze ausgegeben und nicht behandelt. du müsstest quasie in der java funktion den text umwandeln so wie er aussehen soll wenn er ausgegeben wird. was du machen könntest ist den text auf weißem hintergrund als bild wandeln und dann einen strich mitten durch machen (dabei kannst du als beispiel auch die farbe von schwarz in grau ändern). wenn du willst such ich mal ne anleitung bzw. schau mal nach ob das besser mit java oder php gemacht werden wollte (also sprich beide bilder vorbereiten und abhängig von der checkbox ausgeben).
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Snoopy

Trainee

  • "Snoopy" started this thread

Posts: 57

  • Send private message

6

Friday, April 16th 2004, 10:17pm

neee , dann lasse ich es lieber weg. wollte mich nicht ewig damit aufhalten

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

7

Saturday, April 17th 2004, 10:36pm

Hey Hey,

des mit dem strike ist doch auch kein Problem :),
muss halt vor deinem CreateTextNode noch ein CreateElement machen
und dann deine TextNode dem Element anhängen. Und des Element ist dann
dein Child was du auswechselst.

Sollte ungefähr als Javascript so aussehen:

Source code

1
2
3
4
5
6
7
function changetext1(value) {
        var txtid1 = "text1" + value;
        var mystrike = document.createElement("strike");
        var textkn1 = document.createTextNode("hallo");
        mystrike.appendChild(textkn1);
        document.getElementById(txtid1).replaceChild(mystrike, document.getElementById(txtid1).firstChild);
}


Sollte eigentlich so funtzten ... probiers mal aus ;)

Ciao Ciao Ephraim

Snoopy

Trainee

  • "Snoopy" started this thread

Posts: 57

  • Send private message

8

Sunday, April 18th 2004, 7:18pm

Jau, super :D Jetzt muss ich nur noch den Text auslesen da haperts auch noch ein wenig.
Das "Hallo" war ein fester Text.

edit:
oki, habs
var textkn1 = document.createTextNode(document.getElementById(txtid1).firstChild.nodeValue);

This post has been edited 1 times, last edit by "Snoopy" (Apr 18th 2004, 7:21pm)


Snoopy

Trainee

  • "Snoopy" started this thread

Posts: 57

  • Send private message

9

Sunday, April 18th 2004, 7:38pm

Naja, wohl doch nicht ganz.
Habe jetzt die Funktion erweitert:

function changetext1(value) {
for (var i = 1; i < 6; i++) {
var txtid = "text";
txtid += i;
txtid += value;
alert(document.getElementById(txtid).firstChild.nodeValue);
var mystrike = document.createElement("strike");
var textkn = document.createTextNode(document.getElementById(txtid).firstChild.nodeValue);
mystrike.appendChild(textkn);
document.getElementById(txtid).replaceChild(mystrike, document.getElementById(txtid).firstChild);
}
}

Das funzt auch soweit, aber wenn kein Text da ist, gibbet javascript fehler.

und das andere Thema ist, wenn dich die Checkbox nicht checked ist, soll nun der alte Text wieder rein.
Da bekomme ich dann "null" und durchgestrichen.

This post has been edited 1 times, last edit by "Snoopy" (Apr 18th 2004, 7:50pm)


Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

10

Monday, April 19th 2004, 11:49am

Du musst den Text dann natürlich aus dem Strike holen.
Und dann des mit dem Strike weglassen.
Hab hier mal was gecodet, des sich über ne globale Var old merkt
was es als nächstes machen muss. Den Alten Text herstellen oder
ausstreichen.
Kann aber sein des noch ein Fehler drin ist, konnte es nicht test.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var old = 0;
function changetext1(value) {
for (var i = 1; i < 6; i++) {
         var txtid = "text";
         txtid += i;
         txtid += value;
         var strikeId = "strike" + i + value;
         if(!old) {
         var mystrike = document.createElement("strike");
         var textkn = document.createTextNode(document.getElementById(txtid).firstChild.nodeValue);
         mystrike.id = strikeId;
         mystrike.appendChild(textkn);
         document.getElementById(txtid).replaceChild(mystrike, document.getElementById(txtid).firstChild);
          old = 1;
         } else {
         var textkn = document.createTextNode(document.getElementById(strikeId).firstChild.nodeValue);
         document.getElementById(txtid).replaceChild(textkn, document.getElementById(txtid).firstChild);
         old = 0;
        }
}
}


Ciao Ephraim

Snoopy

Trainee

  • "Snoopy" started this thread

Posts: 57

  • Send private message

11

Monday, April 19th 2004, 12:54pm

Super - vielen Dank. War zwar noch ein kleiner Bug drin, ist aber behoben.

Hier mal das Script der Checkbox:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  <td style="width: 1%" align="center">
   <input type="checkbox" name="empty$value" id="empty" value="$value" $checksel[$value] onclick="if (this.checked==true && $actionid != 0) changetext1($value, 0); if (this.checked==false && $actionid != 0) changetext1($value, 1);" />
  </td>
  <td style="width: 1%" align="center">
   $pimage
  </td>
  <td align="left">
   <span class="smallfont" id="text1$value">&nbsp;$title</span>
  </td>
  <td style="width: 15%" align="left">
   <span class="smallfont" id="text2$value">$category</span>
  </td>
  <td style="width: 11%" align="left">
   <span class="smallfont" id="text3$value">$faellig</span>
  </td>
  <td style="width: 10%" align="left">
   <span class="smallfont" id="text4$value">$aufwand</span>
  </td>
  <td style="width: 12%" align="left">
   <span class="smallfont" id="text5$value">$status</span>
  </td>

und deine leicht überarbeitete version:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function changetext1(value, old) {
   for (var i = 1; i < 6; i++) {
         var txtid = "text";
         txtid += i;
         txtid += value;
         var strikeId = "strike" + i + value;
         if (!old) {
            var mystrike = document.createElement("strike");
            var textkn = document.createTextNode(document.getElementById(txtid).firstChild.nodeValue);
            mystrike.id = strikeId;
            mystrike.appendChild(textkn);
            document.getElementById(txtid).replaceChild(mystrike, document.getElementById(txtid).firstChild);
         } else {
            var textkn = document.createTextNode(document.getElementById(strikeId).firstChild.nodeValue);
            document.getElementById(txtid).replaceChild(textkn, document.getElementById(txtid).firstChild);
        }
   }
}

mfg.
Snoopy

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

12

Monday, April 19th 2004, 1:53pm

schön schön jetzt passt des :)

kann man sich des eigentlich irgendwo angucken ... ich
guck des immer gerne an wo ich geholfen habe ;)....


Ciao Ephraim

Prometheus

Administrator

Posts: 3,278

  • Send private message

13

Monday, April 19th 2004, 6:53pm

@ephraim...
das system ist noch in der entwicklung. da es noch nicht fertig bin ich dagegen das das system schon jemand zu sehen bekommst ;) ... nur soviel sei gesagt, das system im gesamten wird der absolute überhammer werden!!!
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Snoopy

Trainee

  • "Snoopy" started this thread

Posts: 57

  • Send private message

14

Monday, April 19th 2004, 10:22pm

habe das ganze noch ein wenig weiter ausgebaut, damit die eigentliche Zeile ja auch gespeichert wird.

Also ein "secret" iframe gemacht (1px x 1px) und in dem javascript beim klicken der checkbox die pHp im iframe geändert, sodas niemand mitbekommt, das nun auch ein db zugriff erfolgt.

wcf.user.socialbookmarks.titel