webForumDet fria alternativet

Mera crossbrowser?

18 svar · 335 visningar · startad av Jesper T

Jesper TMedlem sedan nov. 20017 058 inlägg
#1

Skulle behöva göra detta script mer crossbrowserkompatibelt om det går.

function folder_ondblclick(element) {
    var oUL = element.all.tags("UL")[0];
    if (element.className == "folder_closed")
        element.className =  "folder_open";
    else
        element.className = "folder_closed";

    if (oUL != null) {
        if (oUL.style.display == "none")
            oUL.style.display = "";
        else
            oUL.style.display = "none";
    }
    window.event.cancelBubble = true;
}
Peter SMedlem sedan dec. 20025 484 inlägg
#2

Redigerad.

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#3

Åhhh, tack!

Peter S skrev:

Sätt ett id på "ul"-elementet

På alla ul-element?

Skicka sedan in event som det andra argumentet till funktionen.

Hur gör jag det?

Kör funktionen med detta:
ondblclick=folder_ondblclick(this,event)
Men det smäller här i javascriptet:
"style.display" är Null eller inte ett object
if (oUL.style.display == "none")

Peter SMedlem sedan dec. 20025 484 inlägg
#4

Redigerad.

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#5

Smäller här nu: e.cancelBubble = true;
"undefined" är Null eller inte ett object

Använder din ändring och det första <ul> har id:t "foo":

<ul id="foo">

Peter SMedlem sedan dec. 20025 484 inlägg
#6

Skickar du in event som det andra argumentet? Hur anropar du funktionen?

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#7

Så här: folder_ondblclick(this)

Om jag skriver folder_ondblclick(this,event)
Så blir sidan tom och det kommer inget felmeddelande.

Peter SMedlem sedan dec. 20025 484 inlägg
#8

Kan du posta all kod?

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#9
<script type="text/javascript" language="javascript">
<!--
function folder_ondblclick(element, e) {
    var oUL = ( document.all ) ? document.all[ "foo" ] : ( document.getElementById ) ? document.getElementById( "foo" ) : null;
    if( oUL ){
      if (element.className == "folder_closed")
          element.className =  "folder_open";
      else
          element.className = "folder_closed";

      if (oUL != null) {
          if (oUL.style.display == "none")
              oUL.style.display = "";
          else
              oUL.style.display = "none";
      }
    }
    if( window.event )
       e.cancelBubble = true;
    else if( e.stopPropagation )
       e.stopPropagation();
} 
//-->
</script>

<UL id=foo>
<LI class=folder_closed ondblclick=folder_ondblclick(this,event)>docs
<UL style=display:none;>
<LI class=folder_closed ondblclick=folder_ondblclick(this,event)>abc
<UL style=display:none;>
<LI class=file><img src=imgs/ico_all.gif width=20 height=17>aaa</LI>
</UL></LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this,event)>berit
<UL style=display:none;>
<LI class=folder_closed ondblclick=folder_ondblclick(this,event)>Submeny</LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this,event)>Submeny2
<UL style=display:none;>
<LI class=file><img src=imgs/ico_web.gif width=20 height=17>Test</LI></UL></LI>
<LI class=file><img src=imgs/ico_img.gif width=20 height=17>bild</LI>
</UL></LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this,event)>cba
<UL style=display:none;>
<LI class=file><img src=imgs/ico_web.gif width=20 height=17>test</LI>
</UL></LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this,event)>Elin
<UL style=display:none;>
<LI class=file><img src=imgs/ico_doc.gif width=20 height=17>Elin</LI>
<LI class=file><img src=imgs/ico_code.gif width=20 height=17>jeppe</LI></UL></LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this,event)>Jesper</LI>
<LI class=file><img src=imgs/ico_web.gif width=20 height=17>test</LI>
</UL></LI></UL>
Peter SMedlem sedan dec. 20025 484 inlägg
#10

Det är väl klart att sidan blir tom eftersom koden säger att synligheten för elementet med id foo skall bli "none" vid ett dubbelklick. ;)

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#11

Du sa ju att jag skulle sätta id=foo på första ul-elementet.
Hur skall jag göra då?

Sätter jag id="foo" på de andra ullarna så får jag error.

Peter SMedlem sedan dec. 20025 484 inlägg
#12

Redigerad.

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#13

fel, fel, fel :P ;)

Det funkade finfint i I.E. 6 förut.

Här kommer hela den koden:

<script>
function folder_ondblclick(element) {
    var oUL = element.all.tags("UL")[0];
    if (element.className == "folder_closed")
        element.className =  "folder_open";
    else
        element.className = "folder_closed";

    if (oUL != null) {
        if (oUL.style.display == "none")
            oUL.style.display = "";
        else
            oUL.style.display = "none";
    }
    window.event.cancelBubble = true;
} 
</script>

<UL id=foo>
<LI class=folder_closed ondblclick=folder_ondblclick(this)>docs
<UL style=display:none;>
<LI class=folder_closed ondblclick=folder_ondblclick(this)>abc
<UL style=display:none;>
<LI class=file><img src=imgs/ico_all.gif width=20 height=17>aaa</LI>
</UL></LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this)>berit
<UL style=display:none;>
<LI class=folder_closed ondblclick=folder_ondblclick(this)>Submeny</LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this)>Submeny2
<UL style=display:none;>
<LI class=file><img src=imgs/ico_web.gif width=20 height=17>Test</LI></UL></LI>
<LI class=file><img src=imgs/ico_img.gif width=20 height=17>bild</LI>
</UL></LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this)>cba
<UL style=display:none;>
<LI class=file><img src=imgs/ico_web.gif width=20 height=17>test</LI>
</UL></LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this)>Elin
<UL style=display:none;>
<LI class=file><img src=imgs/ico_doc.gif width=20 height=17>Elin</LI>
<LI class=file><img src=imgs/ico_code.gif width=20 height=17>jeppe</LI></UL></LI>
<LI class=folder_closed ondblclick=folder_ondblclick(this)>Jesper</LI>
<LI class=file><img src=imgs/ico_web.gif width=20 height=17>test</LI>
</UL></LI></UL>
Peter SMedlem sedan dec. 20025 484 inlägg
#14

Ahh, sorry. Jag läste fel i din första kod :r
Så här blir det:

<script>
function folder_ondblclick(element, e) {
    var oUL = ( document.all ) ? element.all.tags( "ul" )[ 0 ] : ( document.getElementsByTagName ) ? element.getElementsByTagName( "ul" )[ 0 ] : null;
    if( oUL ){
       if (element.className == "folder_closed")
           element.className =  "folder_open";
       else
           element.className = "folder_closed";

       if (oUL != null) {
           if (oUL.style.display == "none")
               oUL.style.display = "";
           else
               oUL.style.display = "none";
       }
   }
   if( window.event )
       e.cancelBubble = true;
   else if( e.stopPropagation )
       e.stopPropagation();
} 
</script>

Skicka sedan in event som andra argument vid funktionsanropet :bire

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#15

Woooo! Tack, funkar finfint.
I vilka browsrar tror du?

Peter SMedlem sedan dec. 20025 484 inlägg
#16

MSIE 5-6, Netscape 6-7, Mozilla och Opera 7 skulle jag tro att detta fungerar i.

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#17

Med risk för att bli tjatig.
Finns det något sätt att öppna vissa foldrar i "body onload"?

Peter SMedlem sedan dec. 20025 484 inlägg
#18

Självklart. Det enklaste är väl dock att ta bort style=display:none; från de "ul"-element du vill skall synas då sidan laddats klart? Annars kan du sätta ett id på det/de "ul"-element du vill skall synas och lägga till följande:

window.onload = function(){
	var elm = ( document.all ) ? document.all[ "foo" ] : ( document.getElementById ) ? document.getElementById( "foo" ) : null;

	elm.style.display = "";
};

:)

Jesper TMedlem sedan nov. 20017 058 inlägg
#19

Mycket tack. (Det blir nog att plocka bort "display:none" det verkar lättast ;))

Genererad på 386 ms · cache AV · v20260730165559-full.f96bc7eb