www.webdeveloper.com
Results 1 to 3 of 3

Thread: Object is null in IE 8; Firefox

  1. #1
    Join Date
    Nov 2008
    Posts
    14

    Object is null in IE 8; Firefox

    I have a data tree that works in IE 6 and 7, but won't open in IE 8 or Firefox.
    Debugging tells me that in foldercontent.style.display="", style is a null object. Does anyone know how I can make this work or should I just scrap it and try another script?


    Code:
    var head="display:''"
    		img1=new Image()
    		img1.src="<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/plus.gif") %>"
    		img2=new Image()
    		img2.src="<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/minus.gif") %>"
    		
    		var ns6=document.getElementById&&!document.all
    		var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1
    		
    		function checkcontained(e){
    		var iscontained=0
    		cur=ns6? e.target : event.srcElement
    		i=0
    		if (cur.id=="foldheader")
    		iscontained=1
    		else
    		while (ns6&&cur.parentNode||(ie4&&cur.parentElement)){
    		if (cur.id=="foldheader"||cur.id=="foldinglist"){
    		iscontained=(cur.id=="foldheader")? 1 : 0
    		break
    		}
    		cur=ns6? cur.parentNode : cur.parentElement
    		}
    		
    		if (iscontained){
    		var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
    		if (foldercontent.style.display=="none"){
    		foldercontent.style.display=""
    		cur.style.listStyleImage="url(<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/minus.gif") %>)"
    		}
    		else{
    		foldercontent.style.display="none"
    		cur.style.listStyleImage="url(<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/plus.gif") %>)"
    		}
    		}
    		}
    		
    		if (ie4||ns6)
    		document.onclick=checkcontained

  2. #2
    Join Date
    Nov 2009
    Posts
    1
    Hi there

    Did you manage to resolve this? I have the same problem.

    Thanks

  3. #3
    Join Date
    Nov 2008
    Posts
    14

    object null in IE 8

    Hello Arresteddevelop,

    I removed the Dynamic Drive javascript that they had in the head of their jsp, and dropped in a link to a modified script.

    like so.

    Code:
    <SCRIPT type="text/javascript" src="<&#37;= renderResponse.encodeURL(renderRequest.getContextPath() + "/js/simpletreemenu.js") %>"></SCRIPT>
    </script>
    
    <SCRIPT language="javascript">
    
    ddtreemenu.closefolder='<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/plus.gif") %>'; //set image path to "closed" folder image
    
    ddtreemenu.openfolder='<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/minus.gif") %>'; //set image path to "open" folder image
    
    	function submitCode(code,title) {
    		dcsMultiTrack("DCS.dcsuri","/duv/"+code+".exe","WT.ti",code);
    		document.duv_products.product.value = code;
    		document.duv_products.title.value=title;
    		document.duv_products.submit();
    	}
    </SCRIPT>

    Here is the script I used.


    Code:
    var persisteduls=new Object()
    var ddtreemenu=new Object()
    
    
    
    //////////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)
    }
    This worked for me in every browser. Hope it is helpful.

    Good Luck,
    J Rye Morgan


    P.S. Also the list tags in the view jsp were as follows.

    <form name="duv_products" method="post" action="<portlet:actionURL/>" >
    <input type="hidden" name="<%=Constants.PRODUCT_CODE%>">
    <input type="hidden" name="<%=Constants.PRODUCT_TITLE%>">

    <DIV id="duvmenu">

    <ul id="treemenu1" class="treeview">
    <%= sessionBean.getMarkup() %>
    </ul>

    <script type="text/javascript">
    //ddtreemenu.createTree(treeid, enablepersist, opt_persist_in_days (default is 1))
    ddtreemenu.createTree("treemenu1", false)
    </script>

    </DIV>
    </imput>
    </imput>
    </form>
    Last edited by JRye; 11-18-2009 at 09:20 AM.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

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



Recent Articles