AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [Javascript] Was ist an der Funktion falsch?
Thema durchsuchen
Ansicht
Themen-Optionen

[Javascript] Was ist an der Funktion falsch?

Ein Thema von quendolineDD · begonnen am 27. Jan 2008 · letzter Beitrag vom 27. Jan 2008
Antwort Antwort
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#1

[Javascript] Was ist an der Funktion falsch?

  Alt 27. Jan 2008, 15:49
Hallo DP

Ich hab hier eine Funktion, welche beim Klicken auf ein[*] ausgelöst wird. An die Funktion wird das geklickte[*] übergeben.

Dabei werden alle unter-li's angezeigt, oder wieder ausgeblendet, je nachdem was sie gerade sind. Nun wollte ich das ganze dahingehend erweitern, das alle anderen li's welche offen sind, ausgeblendet werden; sodass letzndlich immer nur ein Optionsmenu geöffnet ist. Vielleicht findet ihr den Wurm, ich hab schon etliche Varianten probiert und vom logischen her hätte es eigentlich schon längst gehen müssen ^^

Code:
function mShow(e)
{
   if (!e.getElementsByTagName)
      return;

   var subobj = e.getElementsByTagName('li');

   if (!subobj)
      return;

   for (j = 0; j < subobj.length; j++)
   {
      subobj[j].style.display = (subobj[j].style.display == 'block') ? 'none' : 'block';
   }
   
   var otherobj = document.getElementsByTagName('ul');
   var otherliobj = otherobj.getElementsByTagName('li');

   for (i = 0; i < otherliobj.length; i++)
   {
      otherliobj[i].style.display = 'block';
   }
}
Aufgerufen wird das ganze wie folgt:

Code:
<ul id="menu">
  <li id="opt1" class="show" onclick="mShow(this);">Options 1
    <ul>[*][url="#"]Item 1[/url][*][url="#"]Item 1[/url][*][url="#"]Item 1[/url][*][url="#"]Item 1[/url][/list]

  <li id="opt2" onclick="mShow(this);">Options 2
    <ul>[*][url="#"]Item 2[/url][*][url="#"]Item 2[/url][*][url="#"]Item 2[/url][*][url="#"]Item 2[/url][/list]

  <li id="opt3" onclick="mShow(this);">Options 3
    <ul>[*][url="#"]Item 3[/url][*][url="#"]Item 3[/url][*][url="#"]Item 3[/url][/list]

  <li id="opt4" onclick="mShow(this);">Options 4
    <ul>[*][url="#"]Item 4[/url][*][url="#"]Item 4[/url][*][url="#"]Item 4[/url][*][url="#"]Item 4[/url][*][url="#"]Item 4[/url][/list] [/list]
Es klappt hiermit ja nichtmal, alle li's wieder auszublenden ... ich versteh das nicht o.O

MfG
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Thorben77

Registriert seit: 22. Okt 2004
359 Beiträge
 
#2

Re: [Javascript] Was ist an der Funktion falsch?

  Alt 27. Jan 2008, 16:38
Warum blendest du die einzelnen Listeneinträge aus? Es ist einfacher gleich die ganze Liste auszublenden.

Ich hoffe mal, Folgendes löst dein Problem:

Code:
function mShow(e)
{
   if (!e.getElementsByTagName) {
      return;
   }
   
   // Alle Listen im Menü:
   var subLists = e.parentNode.getElementsByTagName("ul");
   
   // Erstmal alle Untermenüs ausblenden, die nicht zum geklickten Eintrag gehören:
   for (var i = 0; i < subLists.length; i++) {
      if (subLists[i].parentNode !== e) {
         subLists[i].style.display = "none";
      }
   }
   
   // Das Untermenü des geklickten Eintrags einblenden:
   e.getElementsByTagName("ul")[0].style.display = "block";
}
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [Javascript] Was ist an der Funktion falsch?

  Alt 27. Jan 2008, 17:13
Das blendet nun zwar alle aus, aber das geklickt Element wird nicht wieder angezeigt.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Thorben77

Registriert seit: 22. Okt 2004
359 Beiträge
 
#4

Re: [Javascript] Was ist an der Funktion falsch?

  Alt 27. Jan 2008, 17:49
Hmm, du willst doch erreichen, dass nur die Items des Options-Eintrags eingeblendet werden, der angeklickt wird, oder?
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#5

Re: [Javascript] Was ist an der Funktion falsch?

  Alt 27. Jan 2008, 17:51
Was sagen denn Firedebug bzw. die JS-Fehlerkonsole (Opera / Firefox) dazu? Wenn was ernsthaft nicht stimmt, gibt das doch immer nützliche Fehlermeldungen...
Florian Heft
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: [Javascript] Was ist an der Funktion falsch?

  Alt 27. Jan 2008, 17:55
Nein, kommen keine Fehler. Danach habe ich schon geschaut.

Da muss was am Aufruf falsch sein, obwohl der eigentlich richtig ist o.O

Code:
function mShow(e)
{
   if (!e.getElementsByTagName) {
      return;
   }
   
   // Alle Listen im Menü:
   var subLists = e.parentNode.getElementsByTagName("ul");
   
   // Erstmal alle Untermenüs ausblenden, die nicht zum geklickten Eintrag gehören:
   for (var i = 0; i < subLists.length; i++) {
      if (subLists[i].parentNode !== e) {
         subLists[i].style.display = "none";
      }
   }
   
   // Das Untermenü des geklickten Eintrags einblenden:
   var obj = e.getElementsByTagName("ul");
   
   e.getElementsByTagName("ul")[0].style.display = "block";

   for (var i = 0; i < obj.length; i++) {
   obj[0].childNodes[i].style.display = "block";
   }
}
//-->
Selbst wenn ich auf die einzelnen Childnodes des UL zugreife kommt nichts anderes heraus ... auch tagName oder length geht nicht aufzurufen ...

Mmh, irgendwo lag da ein Fehler. Hab die Funktion nochmal umgeschrieben und bin die Struktur von oben nach unten nochmal gegangen ... so klappt es jetzt:
Code:
function mShow(e)
{
   if (!e.getElementsByTagName) {
      return;
   }
   
   // Alle Listen im Menü:
   var subLists = e.parentNode.getElementsByTagName("ul");
   
   // Erstmal alle Untermenüs ausblenden, die nicht zum geklickten Eintrag gehören:
   for (var i = 0; i < subLists.length; i++) {
      if (subLists[i].parentNode !== e) {
         subLists[i].style.display = "none";
      }
   }
   
   // Das Untermenü des geklickten Eintrags einblenden:
      var mnu   = document.getElementById('menu');
   var toplis = mnu.getElementsByTagName('li');

   for (var it = 0; it < toplis.length; it++)
   {
      var sublis = toplis[it].getElementsByTagName('li');

      for (var is = 0; is < sublis.length; is++)
         if (sublis[is].style)
            sublis[is].style.display = (toplis[it] == e) ? 'block' : 'none';
   }
}
//-->
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz