Results 1 to 4 of 4

Thread: Persist IE6 problem

  1. #1
    Join Date
    Jan 2009
    Posts
    2
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Persist IE6 problem

    1) Script Title: Simple Menu Tree

    2) Script URL (on DD): http://www.dynamicdrive.com/dynamicindex1/navigate1.htm

    3) Describe problem: http://www.idozo.org.php5-1.dfw1-1.w....com/index.php

    My problem is with the persist in IE6 and IE7. You'll notice that in IE6 when you click on the category title, the menu will open, but as soon as the page reloads the menu is closed again.

    I can't get the menu open at all! The crazy thing is that I have the last menu set to open with rel="open" and it's still staying closed. I checked my cookie drawer and I have the cookie from the script, but IE is ignoring it.

  2. #2
    Join Date
    Mar 2005
    Location
    SE PA USA
    Posts
    30,495
    Thanks
    82
    Thanked 3,449 Times in 3,410 Posts
    Blog Entries
    12

    Default

    I'm not aware of any common sort of situation on a single computer where you can run both IE 7 and IE 6 with cookies operational in both of those browsers. One browser or the other gets the cookie functionality. If you have two separate boot partitions or two separate machines, it could work as long as each browser were to be the primary IE browser in its boot environment.

    What's your testing environment like?
    - John
    ________________________

    Show Additional Thanks: International Rescue Committee - Donate or: The Ocean Conservancy - Donate or: PayPal - Donate

  3. #3
    Join Date
    Jan 2009
    Posts
    2
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    I'm running IE6 only. My developer is running IE7 and the persist doesn't work with either computer.


    Code:
    var persisteduls=new Object()
    var ddtreemenu=new Object()
    
    //ddtreemenu.closefolder="components/com_thejoomlapublication/views/publicationlisting/views/list/includes/parent.png" //set image path to "closed" folder image
    //ddtreemenu.openfolder="components/com_thejoomlapublication/views/publicationlisting/views/list/includes/open_parent.png" //set image path to "open" folder image
    
    ddtreemenu.closefolder="" //set image path to "closed" folder image
    ddtreemenu.openfolder="" //set image path to "open" folder image
    
    //////////No need to edit beyond here///////////////////////////
    
    ddtreemenu.createTree=function(treeid, enablepersist, persistdays){
    var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    if (typeof persisteduls[treeid]=="undefined")
    persisteduls[treeid]=(enablepersist==true && ddtreemenu.getCookie(treeid)!="")? ddtreemenu.getCookie(treeid).split(",") : ""
    for (var i=0; i<ultags.length; i++)
    ddtreemenu.buildSubTree(treeid, ultags[i], i)
    if (enablepersist==true){ //if enable persist feature
    var durationdays=(typeof persistdays=="undefined")? 1 : parseInt(persistdays)
    ddtreemenu.dotask(window, function(){ddtreemenu.rememberstate(treeid, durationdays)}, "unload") //save opened UL indexes on body unload
    }
    }
    
    ddtreemenu.buildSubTree=function(treeid, ulelement, index){
    ulelement.parentNode.className="submenu"
    if (typeof persisteduls[treeid]=="object"){ //if cookie exists (persisteduls[treeid] is an array versus "" string)
    if (ddtreemenu.searcharray(persisteduls[treeid], index)){
    ulelement.setAttribute("rel", "open")
    ulelement.style.display="block"
    ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    }
    else
    ulelement.setAttribute("rel", "closed")
    } //end cookie persist code
    else if (ulelement.getAttribute("rel")==null || ulelement.getAttribute("rel")==false) //if no cookie and UL has NO rel attribute explicted added by user
    ulelement.setAttribute("rel", "closed")
    else if (ulelement.getAttribute("rel")=="open") //else if no cookie and this UL has an explicit rel value of "open"
    ddtreemenu.expandSubTree(treeid, ulelement) //expand this UL plus all parent ULs (so the most inner UL is revealed!)
    ulelement.parentNode.onclick=function(e){
    var submenu=this.getElementsByTagName("ul")[0]
    if (submenu.getAttribute("rel")=="closed"){
    submenu.style.display="block"
    submenu.setAttribute("rel", "open")
    ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    }
    else if (submenu.getAttribute("rel")=="open"){
    submenu.style.display="none"
    submenu.setAttribute("rel", "closed")
    ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.closefolder+")"
    }
    ddtreemenu.preventpropagate(e)
    }
    ulelement.onclick=function(e){
    ddtreemenu.preventpropagate(e)
    }
    }
    
    ddtreemenu.expandSubTree=function(treeid, ulelement){ //expand a UL element and any of its parent ULs
    var rootnode=document.getElementById(treeid)
    var currentnode=ulelement
    currentnode.style.display="block"
    currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    while (currentnode!=rootnode){
    if (currentnode.tagName=="UL"){ //if parent node is a UL, expand it too
    currentnode.style.display="block"
    currentnode.setAttribute("rel", "open") //indicate it's open
    currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    }
    currentnode=currentnode.parentNode
    }
    }
    
    ddtreemenu.flatten=function(treeid, action){ //expand or contract all UL elements
    var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    for (var i=0; i<ultags.length; i++){
    ultags[i].style.display=(action=="expand")? "block" : "none"
    var relvalue=(action=="expand")? "open" : "closed"
    ultags[i].setAttribute("rel", relvalue)
    ultags[i].parentNode.style.backgroundImage=(action=="expand")? "url("+ddtreemenu.openfolder+")" : "url("+ddtreemenu.closefolder+")"
    }
    }
    
    ddtreemenu.rememberstate=function(treeid, durationdays){ //store index of opened ULs relative to other ULs in Tree into cookie
    var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    var openuls=new Array()
    for (var i=0; i<ultags.length; i++){
    if (ultags[i].getAttribute("rel")=="open")
    openuls[openuls.length]=i //save the index of the opened UL (relative to the entire list of ULs) as an array element
    }
    if (openuls.length==0) //if there are no opened ULs to save/persist
    openuls[0]="none open" //set array value to string to simply indicate all ULs should persist with state being closed
    ddtreemenu.setCookie(treeid, openuls.join(","), durationdays) //populate cookie with value treeid=1,2,3 etc (where 1,2... are the indexes of the opened ULs)
    }
    
    ////A few utility functions below//////////////////////
    
    ddtreemenu.getCookie=function(Name){ //get cookie value
    var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
    if (document.cookie.match(re)) //if cookie found
    return document.cookie.match(re)[0].split("=")[1] //return its value
    return ""
    }
    
    ddtreemenu.setCookie=function(name, value, days){ //set cookei value
    var expireDate = new Date()
    //set "expstring" to either future or past date, to set or delete cookie, respectively
    var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days))
    document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+"; path=/";
    }
    
    ddtreemenu.searcharray=function(thearray, value){ //searches an array for the entered value. If found, delete value from array
    var isfound=false
    for (var i=0; i<thearray.length; i++){
    if (thearray[i]==value){
    isfound=true
    thearray.shift() //delete this element from array for efficiency sake
    break
    }
    }
    return isfound
    }
    
    ddtreemenu.preventpropagate=function(e){ //prevent action from bubbling upwards
    if (typeof e!="undefined")
    e.stopPropagation()
    else
    event.cancelBubble=true
    }
    
    ddtreemenu.dotask=function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
    var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
    if (target.addEventListener)
    target.addEventListener(tasktype, functionref, false)
    else if (target.attachEvent)
    target.attachEvent(tasktype, functionref)
    }
    Last edited by jscheuer1; 01-23-2009 at 04:58 AM. Reason: format code

  4. #4
    Join Date
    Mar 2005
    Location
    SE PA USA
    Posts
    30,495
    Thanks
    82
    Thanked 3,449 Times in 3,410 Posts
    Blog Entries
    12

    Default

    It appears to be a conflict with mootools. Upgrade to v1.2.1, to do so just as a test, replace:

    Code:
      <script type="text/javascript" src="/media/system/js/mootools.js"></script>
    on all pages, with:

    Code:
    <script src="http://ajax.googleapis.com/ajax/libs/mootools/1.2.1/mootools-yui-compressed.js" type="text/javascript"></script>
    That should work OK with the caption script, and appears not to have the problem with the cookies in the tree menu script in IE 7 at least.

    Be sure to clear your cache before testing the new pages.

    If you decide you like the v1.2.1 of mootools, you may download your own copy, or continue to use the googleapis hosted version, that's what it's there for.
    - John
    ________________________

    Show Additional Thanks: International Rescue Committee - Donate or: The Ocean Conservancy - Donate or: PayPal - Donate

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •