jaymc Posted March 10, 2008 Share Posted March 10, 2008 I have this really good menu system, I didnt write it, Im more php mysql linux blah blah blah. I know enough javascript to make pages more efficient but not fully fledged code like this, so sorry to dump the code! My problem is, the menu works based on MOUSEOVER, I want it to be based ONCLICK I tried finding all refferences to mouseover and changing them to onclick/click. Hasnt worked, I also tried changing just one at a time but it basically renders the menu useless Can anyone who is familiar with javascript find where I can edit the code to make the menu appear ONCLICK, and disapear onmouseout I have picked out the 3 refferences to mouseover below incase it helps, but here is the full code anyway Thanks! * if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover"){ * this.dropmenuobj.onmouseover=function(){cssdropdown.clearhidemenu()} * menuitems.onmouseover=function(e){ var cssdropdown={ disappeardelay: 250, //set delay in miliseconds before menu disappears onmouseout disablemenuclick: true, //when user clicks on a menu item with a drop down menu, disable menu item's link? enableswipe: 1, //enable swipe effect? 1 for yes, 0 for no enableiframeshim: 1, //enable "iframe shim" technique to get drop down menus to correctly appear on top of controls such as form objects in IE5.5/IE6? 1 for yes, 0 for no dropmenuobj: null, ie: document.all, firefox: document.getElementById&&!document.all, swipetimer: undefined, bottomclip:0, getposOffset:function(what, offsettype){ var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop; var parentEl=what.offsetParent; while (parentEl!=null){ totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop; parentEl=parentEl.offsetParent; } return totaloffset; }, swipeeffect:function(){ if (this.bottomclip<parseInt(this.dropmenuobj.offsetHeight)){ this.bottomclip+=10+(this.bottomclip/10) //unclip drop down menu visibility gradually this.dropmenuobj.style.clip="rect(0 auto "+this.bottomclip+"px 0)" } else return this.swipetimer=setTimeout("cssdropdown.swipeeffect()", 15) }, showhide:function(obj, e){ if (this.ie || this.firefox) this.dropmenuobj.style.left=this.dropmenuobj.style.top="-500px" if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover"){ if (this.enableswipe==1){ if (typeof this.swipetimer!="undefined") clearTimeout(this.swipetimer) obj.clip="rect(0 auto 0 0)" //hide menu via clipping this.bottomclip=0 this.swipeeffect() } obj.visibility="visible" } else if (e.type=="click") obj.visibility="hidden" }, iecompattest:function(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body }, clearbrowseredge:function(obj, whichedge){ var edgeoffset=0 if (whichedge=="rightedge"){ var windowedge=this.ie && !window.opera? this.iecompattest().scrollLeft+this.iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15 this.dropmenuobj.contentmeasure=this.dropmenuobj.offsetWidth if (windowedge-this.dropmenuobj.x < this.dropmenuobj.contentmeasure) //move menu to the left? edgeoffset=this.dropmenuobj.contentmeasure-obj.offsetWidth } else{ var topedge=this.ie && !window.opera? this.iecompattest().scrollTop : window.pageYOffset var windowedge=this.ie && !window.opera? this.iecompattest().scrollTop+this.iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18 this.dropmenuobj.contentmeasure=this.dropmenuobj.offsetHeight if (windowedge-this.dropmenuobj.y < this.dropmenuobj.contentmeasure){ //move up? edgeoffset=this.dropmenuobj.contentmeasure+obj.offsetHeight if ((this.dropmenuobj.y-topedge)<this.dropmenuobj.contentmeasure) //up no good either? edgeoffset=this.dropmenuobj.y+obj.offsetHeight-topedge } } return edgeoffset }, dropit:function(obj, e, dropmenuID){ if (this.dropmenuobj!=null) //hide previous menu this.dropmenuobj.style.visibility="hidden" //hide menu this.clearhidemenu() if (this.ie||this.firefox){ obj.onmouseout=function(){cssdropdown.delayhidemenu()} obj.onclick=function(){return !cssdropdown.disablemenuclick} //disable main menu item link onclick? this.dropmenuobj=document.getElementById(dropmenuID) this.dropmenuobj.onmouseover=function(){cssdropdown.clearhidemenu()} this.dropmenuobj.onmouseout=function(e){cssdropdown.dynamichide(e)} this.dropmenuobj.onclick=function(){cssdropdown.delayhidemenu()} this.showhide(this.dropmenuobj.style, e) this.dropmenuobj.x=this.getposOffset(obj, "left") this.dropmenuobj.y=this.getposOffset(obj, "top") this.dropmenuobj.style.left=this.dropmenuobj.x-this.clearbrowseredge(obj, "rightedge")+"px" this.dropmenuobj.style.top=this.dropmenuobj.y-this.clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+1+"px" this.positionshim() //call iframe shim function } }, positionshim:function(){ //display iframe shim function if (this.enableiframeshim && typeof this.shimobject!="undefined"){ if (this.dropmenuobj.style.visibility=="visible"){ this.shimobject.style.width=this.dropmenuobj.offsetWidth+"px" this.shimobject.style.height=this.dropmenuobj.offsetHeight+"px" this.shimobject.style.left=this.dropmenuobj.style.left this.shimobject.style.top=this.dropmenuobj.style.top } this.shimobject.style.display=(this.dropmenuobj.style.visibility=="visible")? "block" : "none" } }, hideshim:function(){ if (this.enableiframeshim && typeof this.shimobject!="undefined") this.shimobject.style.display='none' }, contains_firefox:function(a, b) { while (b.parentNode) if ((b = b.parentNode) == a) return true; return false; }, dynamichide:function(e){ var evtobj=window.event? window.event : e if (this.ie&&!this.dropmenuobj.contains(evtobj.toElement)) this.delayhidemenu() else if (this.firefox&&e.currentTarget!= evtobj.relatedTarget&& !this.contains_firefox(evtobj.currentTarget, evtobj.relatedTarget)) this.delayhidemenu() }, delayhidemenu:function(){ this.delayhide=setTimeout("cssdropdown.dropmenuobj.style.visibility='hidden'; cssdropdown.hideshim()",this.disappeardelay) //hide menu }, clearhidemenu:function(){ if (this.delayhide!="undefined") clearTimeout(this.delayhide) }, startchrome:function(){ for (var ids=0; ids<arguments.length; ids++){ var menuitems=document.getElementById(arguments[ids]).getElementsByTagName("a") for (var i=0; i<menuitems.length; i++){ if (menuitems[i].getAttribute("rel")){ var relvalue=menuitems[i].getAttribute("rel") menuitems[i].onmouseover=function(e){ var event=typeof e!="undefined"? e : window.event cssdropdown.dropit(this,event,this.getAttribute("rel")) } } } } if (window.createPopup && !window.XmlHttpRequest){ //if IE5.5 to IE6, create iframe for iframe shim technique document.write('<IFRAME id="iframeshim" src="" style="display: none; left: 0; top: 0; z-index: 90; position: absolute; filter: progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)" frameBorder="0" scrolling="no"></IFRAME>') this.shimobject=document.getElementById("iframeshim") //reference iframe object } } } Quote Link to comment Share on other sites More sharing options...
jaymc Posted March 12, 2008 Author Share Posted March 12, 2008 Any ideas? Quote Link to comment Share on other sites More sharing options...
jaymc Posted March 14, 2008 Author Share Posted March 14, 2008 I didnt think this would be hard for javascript in the knows Quote Link to comment Share on other sites More sharing options...
fenway Posted March 14, 2008 Share Posted March 14, 2008 Could you post a link to a valid HTML page with this JS script running? Quote Link to comment Share on other sites More sharing options...
jaymc Posted March 14, 2008 Author Share Posted March 14, 2008 Yeh sure http://jmchost.co.uk/test/ Hover over RANK TABLES or MUSIC javascript is located in folder called java/menu.js, but I pasted the source above also Hope you can help! The logical methods I have tried havnt worked Quote Link to comment Share on other sites More sharing options...
fenway Posted March 15, 2008 Share Posted March 15, 2008 Well, the first line should definitely have "hidden" in quotes... but sometimes it's coming back as blank. Quote Link to comment Share on other sites More sharing options...
jaymc Posted March 16, 2008 Author Share Posted March 16, 2008 Thats not the issue, it works fine? The question was about changing the event handler from ONMOUSEOVER to ONCLICK So that you need to CLICK a menu item for the menu to pull down Do you know how? Quote Link to comment Share on other sites More sharing options...
jaymc Posted March 16, 2008 Author Share Posted March 16, 2008 Does anyone know? Suppose you can download the test page and amend the code to make it easier? Quote Link to comment Share on other sites More sharing options...
fenway Posted March 17, 2008 Share Posted March 17, 2008 Thats not the issue, it works fine? The question was about changing the event handler from ONMOUSEOVER to ONCLICK So that you need to CLICK a menu item for the menu to pull down Do you know how? Yes, it is an issue ... I did download the page and worked on a local copy (using IE6). And yes, I understand what you're trying to accomplish. "hidden" definitely has to be quoted, if it worked before, it was simply because e.type == 'click" evaluated for false, hence the second condition was never evaluated. I decided not to look any further at that point. Quote Link to comment Share on other sites More sharing options...
jaymc Posted March 17, 2008 Author Share Posted March 17, 2008 After adding the quotes I was able to play around with the code it get it working Thanks! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.