• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Verbot auf Aufruf von einem Checkbox, sobald der andere ausgewählt ist

Status
Für weitere Antworten geschlossen.

Ananasinka

Neues Mitglied
Hallo zusammen nochmal,

versprochen - die letzte Frage von mir für heute :)

Also, wie ich schon erwähnt habe, arbeite ich mit dem Mapserver. Es gibt bei mir eine Liste von verschiedenen Layern (realisiert als checkbox-liste). Manche davon überschneiden sich - z.b. allgemeine Layer tragen in sich Infos, die auch in speziellen Fachlayern erhalten sind. Deswegen bin ich auf die Idee gekommen, dass es verboten sein könnte, spezielle Fachlayer auszuwählen, solange ein allgemeiner Layer an ist und umgekehrt. Dabei muss ein entsprechender alert kommen (z.B. - schalten Sie den Layer A, um B einzuschalten)

Die Hälfte davon habe ich geschafft - ich kann Fachlayer nicht aufrufen, wenn allgemeiner Layer an ist. Die Frage ist, wie ich die umgekehrte Aufgabe lösen kann.

Das Codefragment:
Code:
[...]
function refreshVisibility() {
    if (this.document.navi.layer[6].checked && this.document.navi.layer[7].checked) {
      this.document.navi.layer[7].checked = false;
      alert("Schalten Sie vorher den Layer6 aus!");
  }

    if (this.document.navi.layer[6].checked && this.document.navi.layer[8].checked) {
      this.document.navi.layer[8].checked = false;
      alert("Schalten Sie vorher den Layer6 aus!");
  }
  }
[...]
Layer6 - allgemeiner Layer
Layer7 und 8 - Fachlayer.
7 und 8 können nicht an sein, wenn 6 an ist (das geht)
7 und 8 können zusammen an sein (geht auch)
6 kann nicht an sein, wenn entweder 7 oder 8 an ist (mein Problem)

Im Moment funktioniert das alles zwar, aber nicht wie ich es brauche: wenn ich Layer6 aufrufe, gehen 7 und 8 automatisch aus und kommt falsher alert "Schalten Sie vorher den Layer6 aus!"

Wäre dankbar für jeden Hinweis.
 
Werbung:
Ich würde das gerne mal als Beispiel sehen. Denn Wenn man hier sowas wie: "Layer8 wenn Layer7 ist nicht wenn Layer5" *übertreibung off* hört dreht sich mir der Kopf :D
Kannst du vielleicht mal in ner Skizze zeigen was passieren soll?
Denn sich als unbeteiligter da rein zu denken ist doch recht schwer :) (Besonders an einem Wochenende :D)
 
Werbung:
Ok, z.B. so:
Mal angenommen, man erstellt für eine Stadt eine interaktive Karte, die als Finder von verschiedenen Infos gilt. Sagen wir mal, Sehenswürdigkeitenfinder.
Dafür erstellt man mehrere Layer, die aufeinander liegen. Beginnend mit den Stadtteilen und Verkehrsmitteln, und fortfahrend mit thematischen Layern mit bestimmten Arten von Sehenswürdigkeiten.
Man könnte das so vorstellen:
Layer 1 - Stadtteile
Layer 2 - Straßennetz
Layer 3 - Hydrography
Layer 4 - ... (noch was ähnliches)
Layer 5 - alle Sehenswürdigkeiten
Layer 6 - Museen
Layer 7 - Theater
Layer 8 - Merkmäle
usw.

Das Problem ist, dass Layer "alle Sehenswürdigkeiten" in sich schon alles erhält - Museen, Theater und Merkmäle. D.h., wenn man zu Layer5 "Sehenswürdigkeiten" zusätzlich noch Layer6 "Museen" anmacht, kriegt man alle Museen in der Karte doppelt.

Deswegen möchte ich es verbieten, Layer 6-8 aufzurufen, solange allgemeiner Layer5 mit allen Sehenswürdigkeiten an ist, um Redundanzen zu vermeiden. Das habe ich im Prinzip geschafft.

Was ich nicht schaffen kann, ist das, dass ich die umgekehrte Aufgabe nicht lösen kann. D.h., wenn man Layer "Museen" oder "Theater" oder "Merkmäle" (oder alle drei - sie können zusammen leben) an hat, kann man Layer "Sehenswürdigkeiten" nicht aufrufen.

Sorry, hoffentlich ist es jetzt besser erklärt:oops:
 
Doch klar. Also. Die Skizze wäre natürlich besser gewesen :p Aber kann mir vorstellen was du meinst.
Ich weiß leider nicht wie gut dein Javascript ist.
Ich würde an deiner Stelle die Checkboxen mit den Musseen und Theatern unsichtbar machen, sobald man alle Sehenswürdigkeiten anklickt.
Vorher musste jedoch alle unter 5 liegenden Checkboxen unchecken und deren uncheck Funktion ausführen.
Wird die 5 wieder unchecked, lässt du die unter 5 liegenden Checkboxen wieder anzeigen.

Ist nur einer von mehreren Vorschlägen. So hätte ich es wohl gemacht :)
 
Werbung:
Danke für den Vorschlag!

Leider ist mein JS gans schlecht, ich habe praktisch nie damit gearbeitet.. Die Idee gefällt mir, ich weiß allerdings nicht, wie ich die realisieren kann.. Im Falle unsichtbarere Boxen bräuchte man im Prinzip keine zusätzlichen Alerts mehr.

Vorher musste jedoch alle unter 5 liegenden Checkboxen unchecken und deren uncheck Funktion ausführen.
Wird die 5 wieder unchecked, lässt du die unter 5 liegenden Checkboxen wieder anzeigen.
Hmmm.. Das habe ich nicht ganz verstanden. Was ist mit 5 Cchckboxen gemeint?
 
Danke für den Vorschlag!

Leider ist mein JS gans schlecht, ich habe praktisch nie damit gearbeitet.. Die Idee gefällt mir, ich weiß allerdings nicht, wie ich die realisieren kann.. Im Falle unsichtbarere Boxen bräuchte man im Prinzip keine zusätzlichen Alerts mehr.


Hmmm.. Das habe ich nicht ganz verstanden. Was ist mit 5 Cchckboxen gemeint?

Nehme doch mal an, du hast für Alles eine Checkbox um den Layer einzublenden
Layer 1 - Stadtteile Layer 2 - Straßennetz Layer 3 - Hydrography Layer 4 - ... (noch was ähnliches) Layer 5 - alle Sehenswürdigkeiten Layer 6 - Museen Layer 7 - Theater Layer 8 - Merkmäle
Und du sagtest ja "Checkbox 5" (alle Sehendwürdigkeiten) Würde Layer 6,7 und 8 auch mit anzeigen. Da mein Javascript Ente gut ist (SCNR :D), erklär ich dir nochmal genauer was ich meine ;) Solltest du also 8 (oder mehr) Checkboxen haben, müsstest du als Funktion beim checken/aktivieren der "Alles anzeigen"-Checkbox erst mal einmal Checkbox 6,7 und 8 unchecken.
Code:
 // Beispiel für eine Checkbox (Checkbox 6) document.getElementById("navi").getElementsByTagName("input")[5].checked = "";
Nachdem du diese unchecked hast, versteckst du diese und führst noch deren Methode aus, die beim unchecken passiert
Code:
 // Beispiel für eine Checkbox (Checkbox 6) document.getElementById("navi").getElementsByTagName("input")[5].style.visibility = "hidden"; hideMuseen();
Und ganz Am Ende führst du dann alle Funktionen für Layer 6-8 aus
Code:
 // Nur ein Beispiel showMuseen(); showTheater(); showMermale();
Genau umgekehrt läuft es ab, wenn du die "Alles Anzeige"-Checkbox uncheckst/deaktivierst
 
werden da nicht dinge falsch verwendet?
fasse die optionen zusammen, die zusammen gehören und sich gegenseitig ausschliessen und mach radio buttons draus.
 
Werbung:
werden da nicht dinge falsch verwendet?
fasse die optionen zusammen, die zusammen gehören und sich gegenseitig ausschliessen und mach radio buttons draus.
Checkboxen sind hier schon richtig angebracht, da man sich zum Beispiel nur Musen anzeigen lassen kann. Oder ich will nur Museen, Theater und Stadtteile sehen :) Ich frage mich garde nur ob das mit dem einblenden in der Karte in Echtzeit passiert. Davon bin ich nämlich die ganze Zeit ausgegangen. Sollte man damit ein Formular abschicken, müssen natürlich nur die anderen Checkboxen unchecked und ausgeblendet werden und keine Funktionen ausgeführt werden.
 
....Es gibt bei mir eine Liste von verschiedenen Layern (realisiert als checkbox-liste)......
...
....dass es verboten sein könnte, spezielle Fachlayer auszuwählen, solange ein allgemeiner Layer an ist und umgekehrt. .....
es geht doch nicht darum, etwas dann anzuzeigen, wenn es erlaubt ist, sondern das anhaken von checkboxen unter bestimmten bedingungen zu verbieten. die schon angezeigt werden. typisch radio eben. im zitat aus dem ersten post also

radio allgemeiner layer
radio fachlayer 1
radio fachlayer 2

ansonsten habe ich die frage falsch verstanden, sorry.
 
radio allgemeiner layer
radio fachlayer 1
radio fachlayer 2
Mit den Radiobuttons geht es nicht. In diesem Fall könnte ich nicht gleichzeitig fachlayer1 und fachlayer2 an haben, aber die können ja (und müssen) zusammenleben!

Gilles hat es absolut richtig verstanden:
Checkboxen sind hier schon richtig angebracht, da man sich zum Beispiel nur Musen anzeigen lassen kann. Oder ich will nur Museen, Theater und Stadtteile sehen
Mit Radiobuttons gibts keine Möglichkeit, mehrere von diesen Layern gleichzeitig an zu haben.
 
Werbung:
Ich frage mich garde nur ob das mit dem einblenden in der Karte in Echtzeit passiert. Davon bin ich nämlich die ganze Zeit ausgegangen. Sollte man damit ein Formular abschicken, müssen natürlich nur die anderen Checkboxen unchecked und ausgeblendet werden und keine Funktionen ausgeführt werden.
Nein, das passiert nich in Echtzeit. Nach der Auswahl muss man die mit dem Button "Karte aktualisieren" bestätigen. Erst danach wird die Karte entsprechend geändert.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben