Jesper T Medlem sedan nov. 2001 7 144 inlägg Trådstart 25 mars 2003 15:55 #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;
}
Jesper T Medlem sedan nov. 2001 7 144 inlägg Å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")
Jesper T Medlem sedan nov. 2001 7 144 inlägg 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">
P Peter S Medlem sedan dec. 2002 5 483 inlägg Skickar du in event som det andra argumentet? Hur anropar du funktionen?
Jesper T Medlem sedan nov. 2001 7 144 inlägg Så här: folder_ondblclick(this)
Om jag skriver folder_ondblclick(this,event)
Så blir sidan tom och det kommer inget felmeddelande.
Jesper T Medlem sedan nov. 2001 7 144 inlägg <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>
P Peter S Medlem sedan dec. 2002 5 483 inlägg 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 T Medlem sedan nov. 2001 7 144 inlägg 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.
Jesper T Medlem sedan nov. 2001 7 144 inlägg fel, fel, fel
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>
P Peter S Medlem sedan dec. 2002 5 483 inlägg Ahh, sorry. Jag läste fel i din första kod
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
Jesper T Medlem sedan nov. 2001 7 144 inlägg Woooo! Tack, funkar finfint.
I vilka browsrar tror du?
P Peter S Medlem sedan dec. 2002 5 483 inlägg MSIE 5-6, Netscape 6-7, Mozilla och Opera 7 skulle jag tro att detta fungerar i.
Jesper T Medlem sedan nov. 2001 7 144 inlägg Med risk för att bli tjatig.
Finns det något sätt att öppna vissa foldrar i "body onload"?
P Peter S Medlem sedan dec. 2002 5 483 inlägg 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 T Medlem sedan nov. 2001 7 144 inlägg Mycket tack. (Det blir nog att plocka bort "display:none" det verkar lättast )