JavaScript: Browserabhängiges Problem...
Übersicht

![]() |
hazumu-kunBetreff: JavaScript: Browserabhängiges Problem... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab heute mal ganz naiv ein Script runtergeschrieben um ein Menü interaktiv zu gestalten, leider funktioniert das jetzt nur in Opera.
Jeder andere Browser scheitert beim Aufrufen der "expand()" Funktion. Das Bild wird zwar geändert, aber dann hört die Funktion anscheinend schon auf. Hat jemand eine Idee was ich falsch mache? Code: [AUSKLAPPEN] function expand(nodename) { document.getElementById(nodename+"_link").onclick="collapse('"+nodename+"')"; document.getElementById(nodename+"_icon").src="images/collapse.png"; document.getElementById(nodename+"_icon").onclick="collapse('"+nodename+"')"; document.getElementById(nodename+"_menu").style="visibility: visible;"; setCookie ("menu_expanded_"+nodename,1); } function collapse(nodename) { document.getElementById(nodename+"_link").onclick="expand('"+nodename+"')"; document.getElementById(nodename+"_icon").src="images/expand.png"; document.getElementById(nodename+"_icon").onclick="expand('"+nodename+"')"; document.getElementById(nodename+"_menu").style="visibility: hidden; height: 0;"; setCookie ("menu_expanded_"+nodename,0); } function setCookie (c_name,value,expiredays) { var exdate=new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie= c_name+"="+escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toUTCString()); } function getCookie (c_name) { if (document.cookie.length>0) { c_start= document.cookie.indexOf(c_name + "="); if (c_start!=-1) { c_start= c_start + c_name.length+1; c_end= document.cookie.indexOf(";",c_start); if (c_end==-1) c_end= document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; } function init() { var nodes= new Array(); nodes[0]= "Produkte"; nodes[1]= "Downloads"; nodes[2]= "Videos"; for (i in nodes) { var ck= getCookie ("menu_expanded_"+nodes[i]); if (ck==1) expand(nodes[i]); } } EDIT: Zum Thema Google: Ich weiß noch nichtmal wonach ich suche... Hab mich erst seit gestern ein wenig in Javascript eingearbeitet. |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] function setCookie (c_name,value,expiredays)
Code: [AUSKLAPPEN] setCookie ("menu_expanded_"+nodename,1);
Wait a second... bemerkt? da fehlt ein Parameter. Für Firefox gibt es btw FireBug. Die Fehlerkonsole hats da auch. |
||
Warbseite |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaub daran liegt es nicht, da ein ausgelassener Parameter sich anscheinend als "null" verhält, dafür ist sogar ne Prüfung IN der Funktion, deswegen hatte ich das mit Absicht so programmiert.
Auch wenn ich ein ",null" dabeischreibe funktioniert es in Firefox immernoch nicht. Mit Firebug kann ich nicht viel anfangen, der zeigt mir keine Fehler beim Ausführen an. Wer mir vllt besser helfen kann wenn er das Script in (Nicht-)Aktion sieht: http://vikenemesh.bplaced.net Rechts im Menü, jeder Eintrag hinter dem ein "+"-Icon ist ist ausklappbar. Wie man sieht wird das Bild geändert, aber danach passiert nichts weiter, weil folgende Zeile anscheinend nicht mehr ausgeführt wird. Code: [AUSKLAPPEN] document.getElementById(nodename+"_icon").onclick="collapse('"+nodename+"')";
|
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Firefox zeigt mir diesen Fehler in der Fehlerkonsole:
Code: [AUSKLAPPEN] Fehler: setting a property that has only a getter
Quelldatei: http://vikenemesh.bplaced.net/cms/menu.js Zeile: 6 mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei Minefield bekomme ich nur den Fehler das zu wenig Parameter angegeben sind.
Laut mpmxyz's Meldung ist .style nur getter(seltsam, das .style bei FireBug als Get und Set ist). versuche es doch mal mit style.visibility = ... . Oder du kannst mal versuchen visibility durch display zu ersetzen. |
||
Warbseite |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie schaltet man denn die Fehlerkonsole an?
Und wie muss ich den Code jetzt umschreiben? Edit: Ein wenig Googlen hat mich zum Ziel gebracht: *Klick* Code: [AUSKLAPPEN] function expand(nodename) { document.getElementById (nodename+"_link").setAttribute ("onclick","collapse('"+nodename+"')"); document.getElementById (nodename+"_icon").setAttribute ("src","images/collapse.png"); document.getElementById (nodename+"_icon").setAttribute ("onclick","collapse('"+nodename+"')"); document.getElementById (nodename+"_menu").setAttribute ("style","visibility: visible;"); setCookie ("menu_expanded_"+nodename,1,null); } function collapse(nodename) { document.getElementById (nodename+"_link").setAttribute ("onclick","expand('"+nodename+"')"); document.getElementById (nodename+"_icon").setAttribute ("src","images/expand.png"); document.getElementById (nodename+"_icon").setAttribute ("onclick","expand('"+nodename+"')"); document.getElementById (nodename+"_menu").setAttribute ("style","visibility: hidden; height: 0;"); setCookie ("menu_expanded_"+nodename,0,null); } Der Code funktioniert jetzt mit sämtlichen weitverbreiteten Browsern. In sämtlichen Chromium Derivaten müsste es auch funktionieren. |
||
- Zuletzt bearbeitet von hazumu-kun am Mi, Dez 22, 2010 15:58, insgesamt 2-mal bearbeitet
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Shift+J oder mit FireBug F12
Lösung 1: Code: [AUSKLAPPEN] function expand(nodename) {
with(document){ getElementById(nodename+"_link").onclick="collapse('"+nodename+"')"; getElementById(nodename+"_icon").src="images/collapse.png"; getElementById(nodename+"_icon").onclick="collapse('"+nodename+"')"; getElementById(nodename+"_menu").style.visibility="visible"; } setCookie ("menu_expanded_"+nodename,1); } function collapse(nodename) { with(document){ getElementById(nodename+"_link").onclick="expand('"+nodename+"')"; getElementById(nodename+"_icon").src="images/expand.png"; getElementById(nodename+"_icon").onclick="expand('"+nodename+"')"; getElementById(nodename+"_menu").style.visibility="hidden"; } setCookie ("menu_expanded_"+nodename,0); } Lösung 2: Code: [AUSKLAPPEN] function expand(nodename) {
with(document){ getElementById(nodename+"_link").onclick="collapse('"+nodename+"')"; getElementById(nodename+"_icon").src="images/collapse.png"; getElementById(nodename+"_icon").onclick="collapse('"+nodename+"')"; getElementById(nodename+"_menu").style.display="block"; } setCookie ("menu_expanded_"+nodename,1); } function collapse(nodename) { with(document){ getElementById(nodename+"_link").onclick="expand('"+nodename+"')"; getElementById(nodename+"_icon").src="images/expand.png"; getElementById(nodename+"_icon").onclick="expand('"+nodename+"')"; getElementById(nodename+"_menu").style.display="none"; } setCookie ("menu_expanded_"+nodename,0); } Du solltest dir jQuery angucken und lernen auch damit umzugehen. Wird dir einiges an Arbeit ersparen. |
||
Warbseite |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Shift+J bewirkt bei meinem Firefox nichts.
Dass Problem war, dass Firefox irgendwie den direkten Zugriff auf Objekt Eigenschaften verweigert hat, deswegen funktioniert der Code aus meinem Edit mit "setAttribute" jetzt. Deine Lösung, Xaymar, würde nichts ändern, die Ausführung bricht schon vor dem Ändern des CSS ab. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group