I min html har jeg en linje der ser sådan ud: <li id="navn"><a href="#">Test</a>
Det var så meningen at dette list item skulle få tildelt en klasse med hover, men intet virker. Der er helt sikkert en fejl i scriptet, men jeg kan ikke rigtigt finde den.
Men det letteste er måske at du kopierer siden over til dig selv og prøver dig frem lokalt fremfor at komme med løsningsforslaget her hvorefter jeg så skal teste om det virker.
"Det er jo netop hele pointen" - eeeehm, du har jo ikke nævnt dette faktum nogen steder, så hvordan var det lige jeg skulle være opmærksom på dette?
At du skifter en class på runtime til en class som ikke har nogen effekt i IE kommer den jo ikke til at fungere af. Det havde været lidt mere vejledende hvis du havde beskrevet at det faktisk var det du var kommet frem til at og du nu søgte efter et alternativ til :hover på et element i IE...
Hvis du skal have det til at fungere i IE, så skal du jo nok påvirke left-attributten direkte på style-objektet i de funktioner du sætter op inde i Hover-funktionen og ikke skifte class...
Som sagt har jeg et mere avanceret script der fungerer, det kan godt lade sig gøre at lave det sådan som jeg har skitseret, for ved skift af li's klasse bliver ul jo netop flyttet da den pludseligt bliver stylet anderledes. Jeg er ret sikker på at scriptet har fejl, klassen bliver ikke ændret. Hvis man prøver at sætte en alert ind i scriptet bliver den ikke udført.
Jeg skulle da sikkert have beskrevet lidt nærmere hvad der skulle ske, men du spurgte nu heller ikke om noget.
Det er herfra det hele stammer: http://www.htmldog.com/articles/suckerfish/dropdowns/example/bones1.html Men desværre er mine javascriptfærdigheder langt fra gode, så det lykkedes mig ikke rigtigt at omskrive funktionen. Grunden til at jeg vil omskrive den er fordi jeg kun skal have en drop down, derfor vil jeg gerne have så simpel en funktion som muligt.
Nej, hvis jeg ikke kan regne med den beskrivelse jeg får, så er vi da ude på et skråplan... eller hvad synes du? :)
Anyway! Hvis jeg kigger i din source nu, så ken jeg se at du har start på script-sektion to gange (og igen vil jeg da anbefale at du fjerner det mellemrum foran over i strengen " over"):
<script type="text/javascript">
<script type="text/javascript"> function Hover() { var identity=document.getElementById("navn"); identity.onmouseover=function() { this.className=" over"; } identity.onmouseout=function() { this.className=""; } } window.onload=Hover; </script>
Det er jo sådan set ligegyldigt om du ved hvad effekten af scriptet skal være udover at skifte className. Scriptet indeholdt fejl og dem ville jeg gerne have fundet. Du kunne jo netop regne med den beskrivelse du fik, der er en fejl i dette script. Du fejlfandt så og jeg meldte ud om det virkede. Jeg kan ikke se hvorfor det skulle være nødvendigt for dig at vide at det var for at få hover på andet end a i IE. Bortset fra det synes jeg det er rimeligt klart at scriptet går ud på noget sådant, der er to actions, mouseover og mouseout. Men jeg havde nok bare stirret for langt tid på skidtet hvilket havde gjort at der sneg sig diverse fejl ind. Jeg fik selv løst problemet kort inden dit sidste indlæg, jeg startede simpelthen forfra og så virkede det.
Hvis man fjerner mellemrummet før over virker det ikke ordentligt, så ter det sig mærkeligt. Jeg skal ikke kunne sige hvorfor.
Tak for indsatsen, smid et svar og du får nogle point.
Det kunne være løsningsforslaget ville have været anderledes hvis mål et var tegnet op på forhånd, derfor kan det godt betale sig at abstrahere lidt mere fra problemet end bare at der er en fejl.
Anyway! Siden jeg ikke rigtig bidragede til løsningen, vil jeg ikke tage point for det, så ellers tak :)
Undgå for Guds (og dine brugeres) skyld at skifte CSS-klasse på elementer - det performer elendigt. Ved lidt mere komplicerede sider, kan det faktisk tage flere sekunder! Årsagen er, at browseren ikke kan holde styr på alle kaskader og nedarvninger og derfor starter helt forfra med at beregne alle sidens styles og genrendere siden.
Det er altid betydeligt hurtigere at skifte de enkelte style-properties på elementet - også selvom der er rigtig mange :)
<script type="text/JavaScript"> var oOver = {"backgroundColor":"red", "color":"yellow", "borderColor":"yellow black black yellow"}; var oOut = {"backgroundColor":"yellow", "color":"red", "borderColor":"yellow"}; function swap(elm, act) { var o = (act=="over")? oOver : oOut; for (var x in o) elm.style[x] = o[x]; } </script>
Hej Olebole, jeg vil lige overveje hvor mange styles der skal skiftes i det endelige resultat, det drejer sig kun om en klasse med to underklasser. Men menuen jeg er ved at lave er sådan set en suckerfish og jeg synes også andre drop down menuer lavet med ren css og en smule javascript gør det på samme måde, altså ved at skifte klassen. Indtil videre kan jeg i hvert tilfælde ikke mærke noget performanceproblem, så lige nu vil jeg lade koden afgøre problemet, altså hvad der er kønnest. Jeg vil i hvert tilfælde gerne undgå javascript i selve linket (jeg laver et link til en side med menuen så dem uden javascript også kan se en menu).
Der sker præcis det samme uanset, hvormange klasser, der skiftes - hele dokumentet skal genberegnes. Hvad der bruges rundt omkring, bør ikke være en retningslinje. Mange af de mest kult-omspundne 'web-guruer' har desværre ikke ret stor indsigt i, hvad de laver og skriver om :)
Hvis du sørger for at sortere alle robotter fra din statistik (også de, der identificerer sig som en browser), vil du opdage, at der stort set ikke er nogen, der surfer uden JavaScript nu om dage. De par stykker er iøvrigt vandt til, at intet på WWW virker for dem ;o)
Har du et link til lidt mere omkring skift af klasse og genberegning af hele siden?
Jeg er klar over at meget få surfer uden javascript, men det betyder ikke så meget for mig at lave en ekstra side der indeholder menuen og en smule tekst. Jeg havde fået kigget en smule forkert på koden du skrev, jeg vil da klart overveje din metode da den jo nok kan laves ret simpelt uden alt det style inline. Især også fordi det nok kun er left: Xem; der skal ændres. Tak for input, jeg tester og vender tilbage snarest.
Men hvis man i stedet kigger her: http://www.quirksmode.org/dom/classchange.html er konklusionen jo den stik modsatte og forskellen er samtidigt ikke ret stor i forhold til om man bruger den ene eller den anden metode. Derudover må jeg give ham ret i at det er en klar fordel at holde præsentation skarpt adskilt fra indhold, og det kan man jo ikke hvis man skifter styling og ikke klassenavn.
Men han tester jo også et dokument, som er særdeles sjældent i virkeligheden ...
Hvis det er et virkeligt dokument med en kompliceret struktur, hvor forskellige elementer er nestet dybt inde i hinanden, og man skal ændre et par style-properties for et relativt begrænset antal elementer, som normalt vil være tilfældet, er jeg helt sikker på, at man vil få et fuldstændig anderledes resultat !-)
- og så kan man jo gøre, som jeg har gjort (og mener, roenving også har gjort): Teste selv :)
Iøvrigt deler jeg fuldt og helt dit ønske om at skille indhold, visuel præsentation og funktionalitet, som jo er selve rygraden i W3C's arbejede. Set i det lys er 'hoover' jo en ren katastrofe, da lige netop den hører til under funktionalitet - og ikke visuel præsentation :)
Derfor er det eneste logiske at bruge JavaScript til style-ændringer ved mouse-events ;o)
olebole > Har du et link til en test du har lavet? Jeg kunne sikkert godt sætte mig ned og bruge en halv krig på at lave et stykke javascript der kan teste det, men jeg synes nu altså at jeg har andet at lave, så hvis du allerede har et script jeg måske kunne indsætte ville det jo være helt perfekt. Men hvis jeg via javascript skifter klassenavn frem for at skifte en style, så kan jeg jo stadigvæk styre alt fra css-filen hvorimod jeg ellers skal til at rode i både markup og style hvis jeg begynder at ændre styles i javascriptet.
Roenving > Det kan du nok have ret i, hvis du har nogle tal på et normalt dokument vil jeg da meget gerne se dem. Men jeg vil sige at jeg ikke indtil videre kan mærke nogen forsinkelse når jeg laver en hover, så et helt stort problem kan det da ikke være (sidder på en 800MHz og tester).
Nej, du styrer intet fra CSS-filen, når det er brugeren der via sine handlinger styrer, hvad der sker. Det er og bliver et helt klassisk eksempel på begrebet 'funktionalitet' - og du behøver endikke komme i nærheden af markup'en for at skifte styles.
Nej, hvis jeg skulle have alle mine gamle tests liggende, var der vist ikke megen plads tilbage på WWW :) Et script kan det vel ikke være noget problem at skrive, når du har grunden - så er det bare at teste i nogle dokumenter med lidt mere kompleks CSS.
Spørgsmålet er så, om du overhovedet skriver i overensstemmelse med W3C og dermed skriver kompleks CSS - eller om du skriver ligeså dårlig CSS, som flertallet ;o)
Først og fremmest må jeg lige sige at mit CSS altid validerer ifølge jigsaw, om det er kompleks ved jeg ikke rigtigt, denne side er rimeligt simpel så det er det sikkert ikke. Jeg er ikke helt sikker på om vi er enige mht. funktionalitet og styling. Jeg er vel enig i at det er funktionalitet eftersom det er menuen på siden, men det er jo sådan set stylingen af menuen jeg piller ved og derved udseende. I hvert tilfælde vil det betyde at jeg skal pille i .html-filen (php-filen) hvis menuen skal se anderledes ud. Hvis jeg derimod vil tilføje menupunkter skal jeg tilføje til .html-filen som jo er meget fint.
Hvis jeg får lavet siden færdig snarest, kan du så hjælpe mig en smule med at lave et script, for som tidligere skrevet er javascript ikke lige mig.
Tja, hvis det er sådan din verden ser ud, så er det det :) I min verden handler alle ændringer af dokumentet - på baggrund af brugerhandlinger - om funktionalitet. Jeg tror aldrig, jeg har set en konsistent forklaring, der peger i andre retninger - men jeg ville da gerne vide, hvad funktionalitet så er - og hvordan den adskiller sig fra visuel præsentation.
Om du skal ind og pille i HTML'en for at få menuen til at se anderledes ud, kommer anpå to ting: Dels, hvormeget der skal ændres - og dels, hvordan du koder. Godt nok skal de forskellige områder adskilles, men der er jo grænser for, hvormeget de kan adskilles ... for tingene hænger jo saqmmen i sidste ende. Hvis man er god til JS/DOM, er det dog ikke noget problem at adskille dem i meget høj grad :)
Tjohh, hvis man f.eks kigger på styling af links, så har det jo noget med brugerhandlinger at gøre, men det er helt klart styling efter min mening.
Som det fungerer nu skydes menuen ud til venstre når der ikke er hover og ind på plads ved hover, men menuen skal sikkert rettes et par px ind, så det vil sige at jeg skal rette det i javascriptet hvilket efter min mening ikke er kønt i forhold til at skulle rette det i css-filen.
Du skriver at det kommer an på to ting om man behøver ændrei html'en, når du skriver html'en, mener du så uden javascript eller med, for jeg tænker at der jo skal ændres i javascriptet. Men kan det da undgåes?
Nå, dette spørgsmål gik vist lidt i stå, jeg lukker det. Hvis nogle af jer føler i har fortjent point, så smid lige et svar.
Synes godt om
Ny brugerNybegynder
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.