power-box.de
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 07.02.2006, 11:12   #1
TP-Senior
 
Benutzerbild von mat81
 
Registriert seit: Jun 2005
Ort: Köln
mat81 macht alles soweit korrekt

Alles auswählen (aber anderes Form / Frame)


Guten Morgen allerseits,

vielleicht kennt ihr diese Funktion zum Auswählen aller im Form befindlichen Checkboxen.

HTML-Code:
<script type="text/javascript">
  function AllMessages()
  {
    for(var x=0; x<document.suchergebnisse.elements.length; x++)
      {
	var y= document.suchergebnisse.elements[x];
	if(y.name!='ALLMSGS') y.checked= document.suchergebnisse.ALLMSGS.checked;
       }
  }
</script>
Aufgerufen wird das ganze dann mit der im selben Form befindlichen Checkbox

HTML-Code:
<input type="checkbox" id="ALLMSGS" name="ALLMSGS" value="ALLMSGS" onclick="AllMessages(this.form);"/>
Nun mein Problem, ich schaffs nicht mal, dass die aufrufende Checkbox in einem anderen Formular liegt. Jedoch soll dieses auch in einem anderen Frame liegen.

Und dann sollen die Werte natürlich wieder zurück ans aufrufende Formular übergeben werden. Hört sich kompliziert an, ist es aber auch.

Ist das überhaupt möglich? Bin nicht sehr JS-versiert.

Habs bis jetzt einfach mal mit einem

parent.framename_xy

vor jedem

'document.suchergebnisse'

leider erfolglos.
__________________

The difference between theory and practice is
that in theory there is no
difference between theory and practice
but in practice there is
mat81 ist offline   Mit Zitat antworten


Alt 08.02.2006, 10:50   #2
TP-Junior
 
Benutzerbild von L e x y l artis
 
Registriert seit: Feb 2006
Ort: Berlin
L e x y l artis macht alles soweit korrekt
Diese Angelegenheit ist im wahrsten Sinne "anspruchsvoll"...

Code:
 <script type="text/javascript">
  function AllMessages()
  {
    for(var x=0; x<document.suchergebnisse.elements.length; x++)
      {
	var y= document.suchergebnisse.elements[x];
	if(y.name!='ALLMSGS') y.checked= document.suchergebnisse.ALLMSGS.checked;
       }
  }
</script>

<form name="suchergebnisse" method="get">
<input type="checkbox" id="ALLMSGS" name="ALLMSGS" value="ALLMSGS" onclick="AllMessages(this.form);"/>
<input type="radio" name="paul">
<input type="checkbox" name="peter">
<input type="radio" name="mary">
</form>
Hier erstmal dein Beispiel in Retour...
Klickt man die erste Checkbox, werden die Anderen ebenfalls gecheckt. Das Selbe gilt beim unchecken der Objekte.

Das Geheimnis?
Es ist ein Frage der Adressierung, kann man sagen.
document.suchergebnisse.elements[x]
document = die betreffende HTML-Seite
suchergebnisse = der name des Forms der angesprochen werden soll
elements[x] = absolut alle Elemente innerhalb des Forms, wobei das X eine variabele Stelle im Elementen-Array ist, und die Zahl für die es steht, genau das Soundsovielte Element von Oben ist, angefangen bei 0...

Ähnlich verhält es sich bei dem Versuch die Elemente innerhalb eines Forms im Nachbarframe anzusprechen. Das kann Wahlweise über den expliziten Namen des Zielframes geschehen oder wie im Elementen-Array des obrigen Beispiels, nummerisch.

Im folgenden Beispiel habe ich mal zur besseren Vorstellung 2 Seiten, Namens "LINKS" und "RECHTS" skizziert, die natürlich in ein Frameset eingebettet sein müssen. Also insgesamt 3 HTML-Seiten, wobei nur der Inhalt von "LINKS" und "RECHTS" angezeigt wird, ist klar.
Code:
______________________________
|           FRAMESET          |
|____________________________ |
|              |            | |
|              |            | |
|   LINKS      |  RECHTS    | |
|              |            | |
|              |            | |
-----------------------------
Befindet sich also im rechten Frame Namens "RECHTS" ein Form mit dem Namen "Suchergebnisse", und es wird aus dem linken Frame versucht darauf zuzugreifen geschieht das theoretisch so:

parent.frames[#].Eigenschaft/Methode();

und praktisch so:

parent.RECHTS.document.suchergebnisse.elements[1]

oder so:

parent.frames[1].document.suchergebnisse.elements[1]

oder so:

parent.frames[1].document.forms[0].elements[1]

und auf Deutsch:
Im übergeordneten Frameset befindet sich ein Frame Namens "RECHTS", er ist der 2. Frame im Frameset, darin befindet sich ein Element Namens "suchergebnisse", es ist das 1. Form im Document, wovon das 2. Element angesprochen werden soll (was immer das sein mag).

Falls also der explizite Name eines Elementes unbekannt sein sollte, kann man diese auch abzählen, wobei immer gilt, bei NULL anfangen zu zählen, immer von Oben und immer von Links.

... dann klappt's auch mit dem Nachbarn!
L e x y l artis ist offline   Mit Zitat antworten
Alt 16.02.2006, 12:33   #3
TP-Senior
 
Benutzerbild von mat81
 
Registriert seit: Jun 2005
Ort: Köln
mat81 macht alles soweit korrekt
Sehr schön, sehr schön! Danke für die Denkstütze.
Ich kam leider erst heute dazu, mich weiter mit diesem Problem zu beschäftigen.

Ich hab den Scriptteil wie folgt geändert:

HTML-Code:
<script type="text/javascript">
	function AllMessages()
	 {
	   for(var x=0; x<parent.ziel_frame.document.ziel_form.elements.length; x++)
		 {
		 	 var y= parent.ziel_frame.document.ziel_form.elements[x];
		   if(y.name!='ALLMSGS') y.checked=document.aufruf_form.ALLMSGS.checked;
		 }		 
	 }
 </script>
Also wichtig sind somit die Unterschiede zw. der letzten Scriptzeile (Klammern ausgenommen) und den anderen. Denn dort wird abgefragt, ob ich das Häkchen setze.

Nun klappt die Übergabe an den Zielframe wunderbar.

ABER

Irgendwie muss ich dem aufrufenden Form noch zurückgeben, welche Werte hinter den markierten Checkboxen des Ziel-Formulars liegen.

Denn das aufrufende Formular möchte ich ja dann auch absenden.

Zwar kann ich alle Werte zurück übergeben, die durch "Alle Auswählen" gewählt wurden.
Doch werden Felder nicht berücksichtigt, deren Häkchen ich per Hand entfernt habe.


Vielleicht hast du oder die anderen Kollegen eine Lösung.

Danke schonmal bis hierhin.

EDIT

Also mein Script sieht dann so aus

HTML-Code:
<script type="text/javascript">
function AllMessages()
 {
		// Werte-String, soll beim Durchlauf die Werte der angeklickten Felder aufnehmen
		var werte = '';
			
			
 	 // Schleife zum Druchlauf jeden Elements des ZielFormulars
   for(var x=0; x<parent.ziel_frame.document.ziel_form.elements.length; x++)
	 {
	 	 // für jeden Durchlauf das aktuelle Element an y übergeben	 
	 	 var y= parent.ziel_frame.document.ziel_form.elements[x];
	   
		 // Alle Elemente, die nicht ALLMSGS (name der Alle-Checkbox) heißen den wert von diesem übernehmen (checked oder eben nich)
		 if(y.name!='ALLMSGS') y.checked=document.aufruf_form.ALLMSGS.checked;
			 
		 // wenn das Element angeklickt wurde, den Wert zurückgeben
		 if (y.checked) werte = werte + ',' + y.value; //TEST
	 }		 
		 
	 document.aufruf_form.checked_files.value = werte;
	 
 }
</script>
Die Werte aus den durch 'Alle Auswählen' markierten Checkboxen werden zurück übergeben und in den String

Werte

geschrieben.

Dieses wird dann dem im Aufruf-Formular befindlichen Element

checked_files

,welches ein Hidden-Field darstellt, übergeben.



Nun muss ich aber immernoch die Werte aus diesem String rausschmeißen, aus deren Checkbox ich das Häkchen wieder entfernt habe.

Dazu müßte ich doch irgendwie dieses Skript im Frame des Aufruf-Formulars ansprechen. Nur wie?

onClick = "???????AllMessages(???)


EDIT - LÖSUNG:

Habs folgendermaßen hinbekommen

HTML-Code:
<script type="text/javascript">

		// Wenn Send gesetzt ist, sollen nicht alle Häkchen gesetzt werden
		// Erst wenn Send gesetzt ist, sollen die Werte übergeben werden
	 function AllMessages(send)
	 {
	 	 // Werte-String, soll beim Durchlauf die Werte der angeklickten Felder aufnehmen
		 var werte = '';
			
	 	 // Schleife zum Druchlauf jeden Elements des ZielFormulars
	   for(var x=0; x<parent.ziel_frame.document.ziel_form.elements.length; x++)
		 {
		 	 // für jeden Durchlauf das aktuelle Element an y übergeben	 
		 	 var y= parent.ziel_frame.document.ziel_form.elements[x];
		   
			 // Alle Elemente, die nicht ALLMSGS (name der Alle-Checkbox) heißen den wert von diesem übernehmen (checked oder eben nich)
			 if(y.name!='ALLMSGS' && send != 1) y.checked=document.aufruf_form.ALLMSGS.checked;
			 
			 // wenn das Element angeklickt wurde, den Wert zurückgeben
			 if (send == 1)
			 {
			 		if (y.checked) {werte = werte + ',' + y.value; }//TEST
			 }
		 }		 
		 
		 if (send == 1) document.aufruf_form.hidden_feld_xy.value = werte;
	 }	
	
 </script>
Ich habe dann im Aufruf-Formular wie gehabt die Checkbox, durch die im Zielform/Zielframe alle Checkboxen markiert werden.

HTML-Code:
<form action="wasauchimmer.php" method="post" name="aufruf_form" target="ziel_frame">
		<input type="checkbox" id="ALLMSGS" name="ALLMSGS" value="ALLMSGS" onclick="AllMessages();"/>
		<label for="ALLMSGS">Alle wählen</label>
		<select name="egal">
			<option>löschen</option>
			<option>verschieben</option>
			<option>was auch immer</option>
	        </select>
		<input type="hidden" name="hidden_feld_xy" />
		<input type="image" src="../images/buttons/go.gif" onclick="AllMessages(1);" />
</form>
Wenn AllMessages mit (1) aufgerufen wird, werden die Werte übergeben. Zack, fertig.

Hatte noch nie viel mit JS zu tun, aber langsam komm ich auf den Geschmack. ;-)
__________________

The difference between theory and practice is
that in theory there is no
difference between theory and practice
but in practice there is

Geändert von mat81 (16.02.2006 um 15:26 Uhr).
mat81 ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > HTML Puristen > Javascript
Alles auswählen (aber anderes Form / Frame) Alles auswählen (aber anderes Form / Frame)
« PullDown Menü geht nicht mehr zu, fehlt JS Mouseout-Funktion? | JS-Filter für Emailadresse »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:13 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67