03. juli 2006 - 22:44Der er
39 kommentarer og 1 løsning
Javascript erstatte billed udfra nuviste billeds navn
Hejsa
Jeg har pt. følgede kode, der opdater et billed og et element:
st = document.getElementById('el'+id+'Child').style; st.display = (st.display!='block')?'block':'none'; document.getElementById(d.id+'pic').src = (st.display=='block')?"pics/triup.gif":"pics/tridown.gif";
Nu er det sådan at jeg gerne vil have at koden understøtter flere billeder, og jeg vil derfor gerne have udvidet ovenstående til at håndter følgende 3 eksempler:
Eks1: pics/Button_Send_Down.gif vises og erstattes af pics/Button_Send_Up.gif.
Eks2: pics/Button_Link_Down.gif vises og erstattes af pics/Button_Link_Up.gif.
Eks3: pics/tridown.gif vises of skal erstattes pics/triup.gif
Og tilsvarende omvendt, således at hvis alle "up" billederne vises, så skal de erstattes af "down" billederne.
Billederne vil altid være navngivet som Button_XXX_Down.gif og Button_XXX_Up.gif og hvis de ikke er det, så er de navngivet som tridown.gif og triup.gif. Håber I kan hjælpe, og hvis det kan hjælpe jer at jeg omnavngiver mine billeder til Button_Down_XXX.gif så gør jeg gerne det.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
var picturesDown = new Array() for (x in picturesUp) { document.getElementById(d.id+'pic').src = (st.display=='block')?picturesUp[x]:picturesDown[x]; }
Det kan det vel nok godt. Men da jeg kalder en js include fra mange sider, skal det være siden der selv finder ud af hvilke billeder den skal bruge, og derfor også hvad arrayet skal indeholde. Jeg har ikke mulighed for at rette alle siderne til der kalder js filen, men kun selve js filen.
Min onclick er pt som følgende: collapseExpand(this)
Og jeg kan godt ændre i den så jeg sender billednavnet med. Men det skal gerne laves såldes at hvis der ikke sendes et navn med, så benytter den standard knapperne tridown.gif og triup.gif.
function collapseExpand(d){ var id = d.id.substring(6); st = document.getElementById('el'+id+'Child').style; st.display = (st.display!='block')?'block':'none'; document.getElementById(d.id+'pic').src = (st.display=='block')?"pics/triup.gif":"pics/tridown.gif"; }
function collapseExpand(d,buttonUp,buttonDown){ var picturesUp = new Array(); var picturesDown = new Array(); if ('variablen' == "") { picturesUp.push("pics/triup.gif"); picturesDown.push("pics/tridown.gif"); } else { picturesUp.push(buttonUp); picturesDown.push(buttonDown); } var id = d.id.substring(6); st = document.getElementById('el'+id+'Child').style; st.display = (st.display!='block')?'block':'none'; for (x in picturesUp) { document.getElementById(d.id+'pic').src = (st.display=='block')?picturesUp[x]:picturesDown[x]; } }
_______ Så skal du kalde den som // Onclick="collapseExpand(d, 'link til knap op', 'billede til knap down')" _______
function collapseExpand(d,buttonUp,buttonDown){ var picturesUp = new Array(); var picturesDown = new Array(); if ((buttonUp == "") || (buttonDown == "")) { picturesUp.push("pics/triup.gif"); picturesDown.push("pics/tridown.gif"); } else { picturesUp.push(buttonUp); picturesDown.push(buttonDown); } var id = d.id.substring(6); st = document.getElementById('el'+id+'Child').style; st.display = (st.display!='block')?'block':'none'; for (x in (picturesUp && picturesDown)) { document.getElementById(d.id+'pic').src = (st.display=='block')?picturesUp[x]:picturesDown[x]; } } ====
Ovenstående benyttes til at sikre at kun et div element vises på siden, men som det er nu så bliver alle andre billeder jo erstattet af standard billedet.
st = document.getElementById('el'+id+'Child').style; st.display = (st.display!='block')?'block':'none'; for (x in (picturesUp && picturesDown)) { document.getElementById(d.id+'pic').src = (st.display=='block')?picturesUp[x]:picturesDown[x]; } }
Det er altså den midterste del der skal justeres til. For at gøre det så nemt som muligt kan jeg ændre alle billed navne så de bliver i formatet som føglgende: Button_Send_Up.gif
Det gør at man for hver div-tag skal finde det nuværende viste billed og erstatte Up med Down, altså Button_Send_Up.gif ->Button_Send_Down.gif
Den skal erstatte "Down" med "Up" så Button_Send_Down.gif -> Button_Send_Up.gif Button_Link_Down.gif -> Button_Send_Up.gif Button_XXX_Down.gif -> Button_XXX_Up.gif
var img = document.getElementById("button" + Id).src; if (img.search(/Up/i) != -1) { var imgLocation = (img.search(/Button_/i)); imgLocation = img.slice(0, imgLocation); var begin = (img.search(/_/i)) + 1; var end = (img.search(/Up/i)) - 1; var part = img.slice(begin, end); img = imgLocation + "Button_" + part + "_Up.gif"; } else { var imgLocation = (img.search(/Button_/i)); imgLocation = img.slice(0, imgLocation); var begin = (img.search(/_/i)) + 1; var end = (img.search(/Down/i)) - 1; var part = img.slice(begin, end); img = imgLocation + "Button_" + part + "_Down.gif"; }
var img = document.getElementById('Parent' + divs[i].id.match(/\d+/g)[0]+'pic').src; if (img.search(/Up/i) != -1) { var imgLocation = (img.search(/Button_/i)); imgLocation = img.slice(0, imgLocation); var begin = (img.search(/_/i)) + 1; var end = (img.search(/Up/i)) - 1; var part = img.slice(begin, end); img = imgLocation + "Button_" + part + "_Up.gif"; } else { var imgLocation = (img.search(/Button_/i)); imgLocation = img.slice(0, imgLocation); var begin = (img.search(/_/i)) + 1; var end = (img.search(/Down/i)) - 1; var part = img.slice(begin, end); img = imgLocation + "Button_" + part + "_Down.gif"; }
Hvis jeg sætter en alert efter var img ... så får jeg fint udskrevet billed navnet. Det samme gør jeg hvis jeg udskriver en alert efter hele din stump kode. Ved ikke om det kan hjælpe dig til at fejlfinde.
Fandt ud af jeg havde en fejl omkring min if. Så nu lader der til at virke, bortset fra at den vil erstatte med et forkert billed. Koden er pt. som følgende:
var img = document.getElementById('Parent'+divs[i].id.match(/\d+/g)[0]+'pic').src; alert(img); var imgLocation = (img.search(/Button_/i)); imgLocation = img.slice(0, imgLocation); var begin = (img.search(/_/i)) + 1; var end = (img.search(/Up/i)) - 1; var part = img.slice(begin, end);
var img = document.getElementById('Parent'+divs[i].id.match(/\d+/g)[0]+'pic').src; var imgLocation = (img.search(/Button_/i)); imgLocation = img.slice(0, imgLocation); var begin = (img.search(/_/i)) + 1;
if (img.search(/Up/i) != -1) { var end = (img.search(/Up/i)) - 1; var part = img.slice(begin, end); img = imgLocation + "Button_"+part+"_Up.gif"; } else { var end = (img.search(/Down/i)) - 1; var part = img.slice(begin, end); img = imgLocation + "Button_"+part+"_Down.gif"; } document.getElementById('Parent'+divs[i].id.match(/\d+/g)[0]+'pic').src = img; } } }
Tryk på "Tip en ven" eller "Link" knapperne til højre. Når informationerne vises skal pilen pege op og den skal så pege ned når det tilhørende div felt ikke vises.
Hvor meget kendskab har du til JavaScript, for det ser ud til at den ikke ændrer andre billeder end det ene, dvs den skal have alle andre billeder og sætte dem som standard lukket?
Men der er kun en knap der skal vises med en pil op, og alle andre skal så vises med en pil ned.
Men hvis man trykker på en knap for at åbne div'en og så trykker igen for at lukke den, så virker det fint. På samme måde med de anden knap. Det går først galt når man trykker åbner den ene og så trykker på den anden knap.
Og det virker jo fint nok med at lukke de forskellige divs, således at der kun vises en på siden. Det er altså kun lige delen med billederne der går galt.
Som du skriver, så ændre den ikke billedet. Hvis jeg ændre koden til nedenstående, så får jeg ændret billedet som jeg skal, dog med en på forhånd valgt billed: document.getElementById('Parent'+divs[i].id.match(/\d+/g)[0]+'pic').src = "pics/storknap.gif"
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.