Zurück   Flashforum > Alternative Technologien > JavaScript & jQuery

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-03-2010, 17:26   #1 (permalink)
Neuer User
 
Registriert seit: Mar 2010
Beiträge: 2
Red face [jQuery] Tree Traversal

Hallo leute!

Ich bin neu hier in diesem Forum und hoffe ihr könnt mir helfen.
Ich bin gerade dabei, mich in Javascript, bzw jQuery einzuarbeiten und habe schon eine Frage.

Ich habe folgendes Problem. Ich habe einen DIV-Tree, der Checkboxen beinhaltet:

HTML-Code:
<style>
div { 
	width: 150px; 
	background: #abc; 
	border: 2px solid black; 
	margin: 10px; 
</style>

<div id="loka~">
		<input type="checkbox" value="loka~stadt" id="stadt" />Stadt			
		<div id="loka~stadt">
			<input type="checkbox" value="loka~stadt~stadtteil" id="stadtteil"/>Stadtteil
			<div id="loka~stadt~stadtteil">
				<input type="checkbox" value="loka~stadt~stadtteil~straße1" id="straße1" />Straße 1
				<div id="loka~stadt~stadtteil~straße1">
					<input type="checkbox" value="loka~stadt~stadtteil~straße1|1" id="obj_1" />Objekt 1<br />		
					<input type="checkbox" value="loka~stadt~stadtteil~straße1|2" id="obj_2" />Objekt 2<br />		
					<input type="checkbox" value="loka~stadt~stadtteil~straße1|3" id="obj_3" />Objekt 3<br />		
				</div>
				<input type="checkbox" value="loka~stadt~stadtteil~straße" id="straße2" />Straße 2
				<div id="loka~stadt~stadtteil~straße2">
					<input type="checkbox" value="loka~stadt~stadtteil~straße2|4" id="obj_4" />Objekt 4<br />		
					<input type="checkbox" value="loka~stadt~stadtteil~straße2|5" id="obj_5" />Objekt 5<br />
					<input type="checkbox" value="loka~stadt~stadtteil~straße2|6" id="obj_6" />Objekt 6<br />		
				</div>					
			</div>
		</div>
Nun möchte ich beim Click auf eine bestimmte Checkbox alle Child-Checkboxen mit aktivieren. In Child-Richtung habe ich das auch schon hingekriegt. Jetzt versuche ich gerade, dass ganze in ParentRichtung hinzukriegen. Und zwar sollen auch hier alle depends gesetzt werden. Soll z.B. heißen: Klicke auf auf die CB "Stadtteil", werden nicht nur alle Childs gesetzt, sondern auch die CB "Stadt".
Nehme ich nun z.B. "Objekt 1" aus der Selektion heraus, müssen "Straße 1", "Stadtteil" und "Stadt" auch deaktiviert werden.

Die Frage ist nun, wie mache ich das in Parent-Richtung? Muss ich das irgendwie rekursiv machen? Gibt es eine smarte jQuery-Funktion, die ich übersehen habe oder hab ich einfach nur ein Brett vor dem Kopf? :-)
Mein Javascript:

Code:
$(document).ready(function() {
   $(':checkbox').click(function(event) {
			// Behandlung aller Kindobjekte:
			// Aktuelles Kind holen und alle beinhalteten
			// Checkboxen setzen
			var $actChd=$(this).next(); // Aktuelles Kind
			var $actChdCb=$actChd.find(':checkbox');// Alle CBs im Kindobjekt
			
			// Checkbox-Handling
			if ( $(this).attr('checked') == true ) { 
				$actChdCb.attr('checked', true);
			} else {
				$actChdCb.attr('checked', false);
			}			
			
			// Behandlung aller Vaterobjekte:
			// Alle Vaterobjekte holen und beinahltete
			// Checkboxen bei ALLEN gesetzten Child-CBs setzen
			var $actPar=$(this).parent(); // Aktueller Parent
			var $actParCb=$actPar.prev();// CB Aktueller Parent
			parents($actParCb);
			
   });
 });

// Prüfung ob alle Kindobjekte gecheckt sind
function parents(actParCb) {
	checked = true;
	$actChdCb.each(function() {
		if($(this).attr('checked') == false) 
		checked = false;
	});
	if (checked) {
		$actParCb.attr('checked', true);
	} else {
		alert ("Nicht alle Kindelemente gecheckt!");
	}
}
Vielen Dank für Eure Hilfe!

Grüße
MasterYoda

Geändert von MasterYoda (29-03-2010 um 19:42 Uhr)
MasterYoda ist offline   Mit Zitat antworten
Alt 29-03-2010, 21:11   #2 (permalink)
Inventar
 
Benutzerbild von Nightflyer
 
Registriert seit: Jul 2002
Beiträge: 6.882
Code:
$(document).ready( function(){
        
        $(':checkbox').click( function(event) {
	        
	        if( $(this).attr('checked') !== true ){
	           
		        $(this).parents().each( function(i){
		          
		          $(this).children(':checkbox').first().attr('checked', false);
                  
		        });
                
		        $(this).next().find(':checkbox').attr('checked', false);
		        
	        }else{ //Wenn noch nicht selektiert, selektiere alle Kinder und Eltern
            
                $(this).parents().each( function(i){
                    
		          $(this).children(':checkbox').first().attr('checked', true);
                  
		        });
          
	        	$(this).next().find(':checkbox').attr('checked', true);
		        
	        }
	        
		});
            
    });
sowas? Achtung: Version 1.4 erforderlich
__________________
(\__/)
(='.'=)
(")_(")
Nightflyer ist offline   Mit Zitat antworten
Alt 29-03-2010, 21:27   #3 (permalink)
Neuer User
 
Registriert seit: Mar 2010
Beiträge: 2
Oh sehr interessant. :-) Das geht schon fast in die Richtung, danke sehr!

Ich probiere mit dem Beispiel noch ein wenig rum, eigentlich möchte ich es so haben, dass wirklich alle Elemente eines Teilbaumes gecheckt werden müssen, damit der ParentNode auch checked ist.

Sprich:
- Straße1 wird erst gecheckt, wenn Objekt 1,2 und 3 true sind.
- Stadtteil erst, wenn Straße1 und Straße2, sowie Objekte 1,2,3,4,5 und 6 true sind.
- Wenn alle Stadtteile true sind, dann ist auch die Stadt true usw...

Momentan werden schon alle Parents gechecked, wenn man beispielsweise nur Objekt 1 anklickt.

jQuery ist ja echt eine coole Sache, muss da unbedingt schnell lernen! :-)
MasterYoda ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

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

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Jquery und CSS michey HTML und CSS 5 24-03-2010 08:19
Angezeigte Tree Items auslesen bzw. auf Tree Item über Index zugreifen (Drag & Drop) Cookie Monster Flex programmieren 1 14-02-2009 08:53
jQuery animate derkrebs JavaScript & jQuery 2 01-05-2008 12:40
Problem mit jQuery derkrebs JavaScript & jQuery 3 21-04-2008 16:35
[jQuery] Problemchen Nicmare JavaScript & jQuery 1 19-12-2007 12:55


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele