Just nu i M3-nätverket
Gå till innehåll

javaproblem


jan-erik

Rekommendera Poster

Jag håller på att bygga upp en "dynamisk meny-styling", där man ska kunna styra färger etc på menyknapparna.

Det funkar felfritt i IE, men däremot inte i Firefox, där defaultvärdet ligger kvar.

Menyn styrs över ett javascript som jag hämtat hem och inte förstår allting av, men dock tror jag att det är följande avsnitt som styr hur knapparna ska se ut:

// Browser Sniffer
var isIE = (document.getElementById && document.all)?true:false;
var isNS4 = (document.layers)?true:false;
var isNS6 = (document.getElementById && !document.all)?true:false;
var timer;
var obj = (isIE)?"document.all":"document.getElementById"

Skall detta på nåt sätt uppdateras?

 

Om inte felet ligger i detta så kanske här:

 

För att ändra bakgrund/färg så gör jag så här ($prfmenubgr hämtas från fil):

<form action="" method="post" target="_blank" name="menubgrform">
<input type="hidden" name="menubgr" value="<? echo $prfmenubgr; ?>">
<input type="hidden" name="menufrg" value="<? echo $prfmenufrg; ?>">
</form>

<script "type=text/javascript">
var menuBackground = document.menubgrform.menubgr.value;
var smenuBackground = document.menubgrform.menubgr.value;
var fontColour = document.menubgrform.menufrg.value;
var sfontColour = document.menubgrform.menufrg.value;
</script>

 

Det som jag antager tar hand om ovanstående är följande:

function createStyles(quant){
styleBorder=(menuStyle.split(",")[quant-1].toLowerCase() == "flat")?cellBorder:0 
 document.writeln ('<style>');
 document.writeln ('.rcMenuStatic'+quant+' {font-family:'+fontFace.split(",")[quant-1]+';font-size:'+fontSize.split(",")[quant-1]+';color:'+fontColour.split(",")[quant-1]+';font-weight:'+fontWeight.split(",")[quant-1]+';[b]background-color:'+menuBackground.split(",")[quant-1]+[/b]'; cursor:hand; text-decoration:'+fontDecoration.split(",")[quant-1]+'}');

 document.writeln ('</style>');
}

 

kan det verkligen ligga nåt i denna kod som IE och Firefox behandlar olika?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Ett par anmärkningar:

 

1) Använd inte document.writeln.

 

2) För att hantera css-regler så använder du hellre samlingarna cssRules (FF) och rules(IE) samt metoderna insertRule() (FF) och addRule() (IE).

 

3) Referera inte till element med document.elementNamn utan använd de standardiserade metoderna getElementById eller getElementsByName

 

4) Ett script som överhuvudtaget sitter och sniffar efter NS4 låter väldigt gammalt och innehåller troligtvis mängder med icke-standardiserad javascript/DOM och det är nästan bombsäkert att det är därför du har problem.

 

EDIT: Glömde ett litet viktigt ord (inte) i punkt 1 =)

[inlägget ändrat 2007-03-22 13:56:45 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

tack så mycket, du ska få ett poäng!

inte för att jag begrep allt du slrev, men om det är så att det är väldigt gammal kod så finns det kanske ingen anledning att gräva i det, utan i stället försöka hitta en alternativ och modernare kod för menystyrning. har du nåt bra förslag?

Eller kan jag skicka hela skriptet till dej för uptodating?

jea

 

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Har tyvärr inte tid att skriva om hela ditt script, men jag kan ge lite hjälp på vägen. Till att börja med en omskrivning av det jag nämnde kring tillägg av stilar. Lägg till funktionen createStyle samt ändra funktionen createStyles() enligt den kod jag postat på nedanstående länk. Nu är iallafall den delen lite modernare.

 

http://rafb.net/p/QjMhSg94.html

 

I den kod du postade, ändra de mittersta raderna (var menuBackground = ... osv) till:

http://rafb.net/p/fPQJwv58.html

 

Länk till kommentar
Dela på andra webbplatser

Tack så väldigt mycket, jag fattade nog det mesta!

Men, den kod jag skickade var avkortad, hela funktionen createStyles ser ut så här i gammalt skick, och jag förmodar att den kod du skickade bara ska "förlängas":

 

function createStyles(quant){
styleBorder=(menuStyle.split(",")[quant-1].toLowerCase() == 
"flat")?cellBorder:0
 document.writeln ('<style>');
 document.writeln ('.rcMenuStatic'+quant+' 
{font-family:'+fontFace.split(",")[quant-1]+';font-size:'+fontSize.split(",")[quant-1]+';color:'+fontColour.split(",")[quant-1]+';font-weight:'+fontWeight.split(",")[quant-1]+';background-color:'+menuBackground.split(",")[quant-1]+'; 
cursor:hand; text-decoration:'+fontDecoration.split(",")[quant-1]+'}');
 document.writeln ('.rcMenuHover'+quant+' 
{font-family:'+fontFace.split(",")[quant-1]+';font-size:'+fontSize.split(",")[quant-1]+';color:'+fontHoverColour.split(",")[quant-1]+';font-weight:'+fontWeight.split(",")[quant-1]+';background-color:'+menuHoverBackground.split(",")[quant-1]+'; 
cursor:hand; text-decoration:'+fontDecoration.split(",")[quant-1]+'}');
  document.writeln ('</style>');
}

jea

 

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
jag förmodar att den kod du skickade bara ska "förlängas":

Ja, precis. Det blir då alltså två anrop/regeltillägg

http://rafb.net/p/1Noark11.html

 

EDIT: Det kom med ett plustecken för mycket i slutet av näst sista raden

[inlägget ändrat 2007-03-22 14:57:35 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Här är nu den kod jag ändrat efter dina kloka anvisningar: Nån liten miss har JAG säkert gjort, för menyn kommer nämligen inte fram när jag kör scriptet.

 

function createStyle(Selector,Styles) {     
   if (isNS6) {
       document.styleSheets[0].insertRule(Selector+'{'+Styles+'}',0);
   } else {
       document.styleSheets[0].addRule(Selector,Styles,0);
   }
}

function createStyles(quant){
   styleBorder=(menuStyle.split(",")[quant-1].toLowerCase() == "flat")?cellBorder:0; 

   sStyles='font-family:'+fontFace.split(",")[quant-1]+';font-size:'+fontSize.split(",")[quant-1]+';color:'+fontColour.split(",")[quant-1]+';font-weight:'+fontWeight.split(",")[quant-1]+';background-color:'+menuBackground.split(",")[quant-1]+'; cursor:hand; text-decoration:'+fontDecoration.split(",")[quant-1];
   createStyle('.rcMenuStatic'+quant,sStyles);

   sStyles='font-family:'+fontFace.split(",")[quant-1]+';font-size:'+fontSize.split(",")[quant-1]+';color:'+fontHoverColour.split(",")[quant-1]+';font-weight:'+fontWeight.split(",")[quant-1]+';background-color:'+menuHoverBackground.split(",")[quant-1]+'; cursor:hand; text-decoration:'+fontDecoration.split(",")[quant-1]+;
   createStyle('.rcMenuHover'+quant,sStyles);

sStyles='font-family:'+sfontFace.split(",")[quant-1]+';font-size:'+sfontSize.split(",")[quant-1]+';color:'+sfontColour.split(",")[quant-1]+';font-weight:'+sfontWeight.split(",")[quant-1]+';background-color:'+smenuBackground.split(",")[quant-1]+'; cursor:hand; text-decoration:'+sfontDecoration.split(",")[quant-1];
   createStyle('.rcMenuStatic'+quant,sStyles);

 sStyles='font-family:'+sfontFace.split(",")[quant-1]+';font-size:'+sfontSize.split(",")[quant-1]+';color:'+sfontHoverColour.split(",")[quant-1]+';font-weight:'+sfontWeight.split(",")[quant-1]+';background-color:'+smenuHoverBackground.split(",")[quant-1]+'; cursor:hand; text-decoration:'+sfontDecoration.split(",")[quant-1]+;
   createStyle('.rcMenuHover'+quant,sStyles);

}

 

samt denna kod, där jag satt ??? för jag undrar om det inte ska vara ; där. (Fast det hjälpte inte).

<script "type=text/javascript">
var menuBackground,smenuBackground,fontColour,sfontColour???
menuBackground=smenuBackground=document.getElementsByName(menubgr)[0].value;
fontColour=sfontColour=document.getElementsByName(menufrg)[0].value;
</script>

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Jag gjorde ett tillägg i förra inlägget. Det hade kommit med ett +-tecken i slutet av raden som inte ska vara där. Gör en sök-ersätt operation och ersätt +; med ;

 

för jag undrar om det inte ska vara ; där

Jo, det ska det vara.

 

Länk till kommentar
Dela på andra webbplatser

Nu har jag gjort dessa korrigeringar, och nu kommer menyn fram, men med defaultvärden. Dvs det ser ut i IE precis som det gör i FF, och konsekventa fel är bättre än halvtaskiga rätt!

Jag har kollat att $pfrmenubgr har rätt värde när det lämnar formuläret.

 

Länk till kommentar
Dela på andra webbplatser

Detta är den gamla koden för att skapa menuBackground etc:

När jag använder denna så funkar det i IE (byter menyfärg), men inte i FF (händer inget).

<script "type=text/javascript">
var menuBackground = document.menubgrform.menubgr.value;
var smenuBackground = document.menubgrform.menubgr.value;
var fontColour = document.menubgrform.menufrg.value;
var sfontColour = document.menubgrform.menufrg.value;
</script>

 

Detta är den nya koden för att skapa menuBackground etc:

När jag använder denna så funkar det varken i IE eller FF.

 

<script "type=text/javascript">
var menuBackground,smenuBackground,fontColour,sfontColour;
menuBackground=smenuBackground=document.getElementsByName(menubgr)[0].value;
fontColour=sfontColour=document.getElementsByName(menufrg)[0].value;
</script>

 

Det finns även en funktion enligt nedan som tydligen kallar på den funktion som vi ändrade på. Kan det var nåt där som stukats? Menyn är vertical, dvs "orientation.toLowerCase()" = "vertical".

 

// Build and show the main menu items
function showMenus(quant,definedOrientation)
{
 createStyles(quant);
 if(definedOrientation!=""){orientation=definedOrientation}
 if (orientation.toLowerCase() == "vertical"){document.writeln ('<table border="0" cellpadding="0" cellspacing="'+styleBorder+'" bgColor="'+borderColor.split(",")[quant-1]+'">')}
 else{document.writeln ('<table border="0" cellpadding="0" cellspacing="'+styleBorder+'" bgColor="'+borderColor.split(",")[quant-1]+'"><tr>')}  
 for (x=0; x<eval("Menu"+quant).length; x++)
 {
   if (orientation.toLowerCase()=="vertical") document.writeln('<tr>')
   document.writeln ('<td width="'+menuWidth+'" onclick="tdMouseClick(\''+quant+'mainLink'+x+'\')" onMouseOver="hoverMenu(); popDown(\''+quant+'\','+x+', \''+quant+'button'+x+'\',\''+orientation+'\'); " onMouseOut="clearMenu('+quant+','+x+')" ')
   if (menuStyle.split(",")[quant-1].toLowerCase() == "3d"){document.writeln ('style="border-left:'+cellBorder+'px solid '+borderHighlight.split(",")[quant-1]+';border-top:'+cellBorder+'px solid '+borderHighlight.split(",")[quant-1]+';border-right:'+cellBorder+'px solid '+borderShadow.split(",")[quant-1]+';border-bottom:'+cellBorder+'px solid '+borderShadow.split(",")[quant-1]+';"');}        
   document.writeln ('><div id="'+quant+'button'+x+'"><table border="0" cellpadding="'+cellPadding.split(",")[quant-1]+'" cellspacing="0" width="100%"><tr><td class="rcMenuStatic'+quant+'" id="'+quant+'cell'+x+'" nowrap>');
   document.writeln ('<a id="'+quant+'mainLink'+x+'" href="'+eval("Menu"+quant)[x][1]+'" target="'+eval("Menu"+quant)[x][2]+'" class="rcMenuStatic'+quant+'">'+eval("Menu"+quant)[x][0]+'</a></td>');
   if (subIndicate == 1&&eval("subMenu"+quant)[x].length>=1){
     document.writeln('<td class="rcMenuStatic'+quant+'" id="'+quant+'cell'+x+'a" align="right">');
     document.writeln ('<a id="'+quant+'mainLink'+x+'a" href="'+eval("Menu"+quant)[x][1]+'" target="'+eval("Menu"+quant)[x][2]+'" class="rcMenuStatic'+quant+'">'+indicator+'</a></td>');}
   document.writeln ('</tr></table></div></td>');    
   if (orientation.toLowerCase()=="vertical") document.writeln('</tr>')
 }
 if (orientation.toLowerCase() == "vertical"){document.writeln ('</table>');}
 else{document.writeln ('</tr></table>');}   

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...