Avatar billede krogstrup Nybegynder
06. marts 2004 - 18:34 Der er 11 kommentarer og
1 løsning

Skjule & vise SELECT + OBJECT elementer via javascript

Jeg har FRAME-1 og FRAME-2

i FRAME-1 kunne jeg godt tænke mig at have følgende 2 javascript funktioner:

SKJUL()
løber igennem alle SELECT og OBJECT elementer i FRMAE-2 og skjuler disse via et style paramter (f.eks. display)

VIS()
løber igennem alle SELECT og OBJECT elementer i FRAME-2 og viser disse via et style paramter (f.eks. display)

Kan dette lade sig gøre ?

:-)

/David
Avatar billede olebole Juniormester
06. marts 2004 - 18:48 #1
<ole>

Hehe ... Dr. Hook, himself - long time, no see  :)
Prøv noget à la:

var aSelects = parent.FRAMENAVN.document.getElementsByTagName("SELECT");
for (i=0; i<aSelects.length; i++) {
    aSelects[i].style.display = "none"
}

Men hvis det er en menu (eller nogle andre lag), der skal gemme de elementer, der ellers ville 'brænde' igennem, er det bedre at bruge 'visibility = "hidden"'.
Bruger du display, optager elementet ikke plads på siden - det sker ikke ved visibility ... og du undgår, at siden står og 'animerer' ved 'vis/skjul'  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
06. marts 2004 - 18:52 #2
PS: I en funktion vil det se sådan ud:

function showHide(state) {
    var aSelects = parent.FRAMENAVN.document.getElementsByTagName("SELECT");
    for (i=0; i<aSelects.length; i++) {
        aSelects[i].style.visibility = state;
    }
}
// Kaldes med:
  showHide("hidden");
// eller:
  showHide("visible");

/mvh
Avatar billede olebole Juniormester
06. marts 2004 - 18:54 #3
PPS: Hvis du vil nøjes med en enkelt funktion, der kan gemme forskellige slags elementer:

function showHide(tag, state) {
    var aSelects = parent.FRAMENAVN.document.getElementsByTagName( tag );
    for (i=0; i<aSelects.length; i++) {
        aSelects[i].style.visibility = state;
    }
}
// Kaldes med:
  showHide("SELECT", "hidden");
// eller:
  showHide("SELECT", "visible");

Husk at angive tag-navnet i versaler  :)
/mvh
Avatar billede krogstrup Nybegynder
06. marts 2004 - 19:11 #4
Hej Ole

Hvad kan jeg sige andet end; Det virker jo perfekt :-)

Jeg har siden vi sidst var i dialog ofte tænkt på at jeg potentielt godt kunne bruge din "hjerne" som freelance arbejdskraft nu og da....

Hvis dette måtte have din interesse, eller du i øvrigt ikke ville have noget imod at jeg kontaktede dig uden for dette forum, såfremt jeg havde en grim "nød" at knække - ja, så håber jeg du vil sende mig en mail med lidt info om hvordan jeg kan komme i kontakt med dig i den "virkelige verden" :-)

Mange tak for hjælpen :-)

Vil du ha´ nogle points....

/David (email: dk@wkh.dk)
Avatar billede olebole Juniormester
06. marts 2004 - 19:24 #5
Tjaaahhh ... men er vel et gammelt brystbarn - og selv om det nærmer sig et halvt hundrede år siden, jeg blev taget fra, fascinerer de jo stadig.
Så har du problemer med for mange nødder, til du selv kan tage dig af dem alle, hjælper jeg da gerne.
Blot er jeg ikke helt tilfreds med arbejdsdelingen ... hvorfor skal _jeg_ tage mig af de grimme?  :D
Du får en mail  ;o)
/mvh
Avatar billede grunken Nybegynder
06. marts 2004 - 19:26 #6
og hvis man ville have det hele med i en ombæring kunne man vel! (betragt endeligt dette som spammeri af allerede besvaret ?)

<script type="text/javascript">
function visskjul(str){

elm = parent.FRAMENAVN.document.getElementsByTagName("*");

for(i=0;i<elm.length;i++){
  if (elm[i].tagName == "SELECT" || elm[i].tagName == "OBJECT"){
  elm[i].style.visibility = str;
  }
}
}
</script>

<a href="#" onclick="visskjul('hidden');">skjul</a>
<a href="#" onclick="visskjul('visible');">Vis</a>
Avatar billede olebole Juniormester
06. marts 2004 - 19:42 #7
Jamen, det er zq da ikke spam, grunken. Det er altid en fordel at få vist flere muligheder - og vi har jo alle vore egne kodevaner  ;o)
Den eneste hage ved dit eksempel er, at scriptet skal lede alle elementer igennem (som ved document.all i IE). Jeg tror hellere, jeg ville gøre sådan:

function visskjul() {
    var elms, a = new Array();
    for ( i=1; i<arguments.length; i++ ) {
        elms = parent.FRAMENAVN.document.getElementsByTagName(arguments[i]);
        a = a.concat(elms);
    }
    for(i=0;i<a.length;i++){
        a[i].style.visibility = arguments[0];
    }
}
visskjul( "visible", "SELECT", "OBJECT" );

Men bevares ... det giver ikke de store forskelle ved sider i alm. størrelser  :)
/mvh
Avatar billede grunken Nybegynder
07. marts 2004 - 00:56 #8
Du har selvfølgelig ret bole :o), jeg mente bare at man også kan du drukne i løsningsforslag, som egentlige er "ligegyldige" i forhold til operationen man står over for at skulle gennemføre :o)

Dit eksempel er faktisk ganske illustrativt, og viser en god løsning til mellemstore dokumenter, som jeg faktisk aldrig har overvejet :o)

men mon ikke der er en lille smutter? ;p

    for(i=0;i<a.length;i++){
        a[i].style.visibility = arguments[0];
    }

burde nok være

    for(i=0;i<a.length;i++){
      for(j=0;j<a[i].length;j++){
        a[i][j].style.visibility = arguments[0];
      }
    }
Avatar billede olebole Juniormester
07. marts 2004 - 01:11 #9
Jeg har nu altid syntes, flere forskellige løsninger er en god ting på E - så får folk bedre fornemmelsen af, at også script- og programmeringssprog har 'dialekter'  :)

Til dit spm: Nej, jeg har lavet det lidt smartere  ;o)

function visskjul() {
  // Opret en tom variabel (elms) og et array (foreløbig) uden elementer
    var elms, a = new Array();
  // Løb argumenterne igennem (undtagen det første) i en løkke
    for ( i=1; i<arguments.length; i++ ) {
      // For hvert gennemløb, opret et array af elementer med ønsket tag-navn
        elms = parent.FRAMENAVN.document.getElementsByTagName(arguments[i]);
      // HER sker det: Vi 'svejser' a-array'et sammen med element-array'et
        a = a.concat(elms);
    }

  // Her vises eller gemmes elementerne
    for(i=0;i<a.length;i++){
        a[i].style.visibility = arguments[0];
    }
}

/mvh
Avatar billede grunken Nybegynder
07. marts 2004 - 01:26 #10
hmm, så burde jeg nok have drukket lidt mindre vin over aftensmaden for et resultat af ovenstående vil i "mine" browsere, kun lave 2 x "HTML object arrays" :o)

Deraf resltatet med den ekstra for løkke :o), for concat nægter at fungere, som jeg udemærket godt kan se at du har fået den til at fungere :o)

Nå nok om det, jeg tror egentligt at opretter fik sin optimale løsning!
Avatar billede olebole Juniormester
07. marts 2004 - 01:48 #11
FUCK ...! Det er mig, der er et kålho'de  :o|

document.getElementsByTagName(TAG) returnerer ikke et array, men en collection (omend sådan to opfører sig _næsten_ ens).
Du kan prøve at sætte en alert ind lige før den sidste løkke: alert(a). Den vil sige:
[object],[object] ... altså et array bestående af to collections - i stedet for ét langt array.

Morale: Man bør _altid_ teste sine eksempler! Så ka' jeg zq lære det ...!!!  :D

Krogen og grunken >> Glem alt om mit eksempel (06/03-2004 19:42:54) ... [lyden af røde ører, der blafrer]  :)
/mvh
Avatar billede grunken Nybegynder
07. marts 2004 - 02:11 #12
såså olebole ;p

Ikke destomindre er jeg ret sikker på at vi alle forstod hvad der mentes :o), og udover det blev man jo osse beriget med nye muligheder i jsuniverset :o)

vi omskriver en sidste gang, og der burde være opnået den ønskede funktionalitet!

function visskjul() {
    for (i=1; i<arguments.length; i++) {
    var elm = document.getElementsByTagName(arguments[i]);
    for(j=0;j<elm.length;j++)
      elm[j].style.visibility = arguments[0];
    }
}

P.S hvordan dælen lyder sådan nogle ører ? :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester