สอบถามเกี่ยวกับเมนู Dropdown ใน Chrome

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามเกี่ยวกับเมนู Dropdown ใน Chrome

สอบถามเกี่ยวกับเมนู Dropdown ใน Chrome
สอบถามผู้รู้เกี่ยวกับปัญหาเมนู Dropdown มันทับกับเมนูหลัก เป็นเฉพาะตอนรันผ่าน Chrome แต่พอลองรันผ่าน Browser อื่นกลับไม่มีปัญหา

เป็นเพราะอะไร มีวิธีแก้ไหมครับ

อันนี้รันผ่าน Chrome

[img=012]/upload/stock/20141113110339.jpg[/img]

อันนี้รันผ่าน Browser อื่น

[img=013]/upload/stock/20141113111533.jpg[/img]

Code menubar.php

<TR>
<TD>
<DIV id=chromemenu><A class=MENU   href="index.php">

<A class=MENU onmouseover="cssdropdown.dropit(this,event,'gdropmenu7')">
<IMG src="img/menu3.jpg" border=0></A>

  <DIV class="dropmenudiv bluetheme" id=gdropmenu7><A href="pr_president.php">
The President</A> <A href="pr_awards.php">Awards </A> </DIV>

</TD>
</TR>


Code chrome.css

.chromemenugroup {
	
}
.chromemenugroup:unknown {
	CLEAR: both; DISPLAY: block; VISIBILITY: hidden; HEIGHT: 0px; content: "."
}
.chromemenugroup UL {
	BORDER-RIGHT: #bbb 1px solid; BORDER-TOP: #bbb 1px solid; PADDING-LEFT: 0px; BACKGROUND: url(chrometheme/chromebg.gif) repeat-x center center; FLOAT: left; MARGIN: 0px; FONT: bold 12px Verdana; BORDER-LEFT: #bbb 1px solid; WIDTH: 100%; BORDER-BOTTOM: #bbb 1px solid
}
.chromemenugroup UL LI {
	DISPLAY: inline
}
.chromemenugroup UL LI A {
	PADDING-RIGHT: 12px; PADDING-LEFT: 7px; FONT-WEIGHT: bold; BACKGROUND: url(chrometheme/divider.gif) no-repeat right center; FLOAT: left; PADDING-BOTTOM: 6px; COLOR: #7f7f7f; PADDING-TOP: 6px; TEXT-DECORATION: none
}
.chromemenugroup UL LI A:hover {
	COLOR: #494949
}
UNKNOWN {
	content: " v"
}
.chromemenugroup {
	WIDTH: 99%
}
#chromemenu2 UL {
	BACKGROUND: url(chrometheme/chromebg2.gif) repeat-x center center
}
#chromemenu3 UL {
	BACKGROUND: url(chrometheme/chromebg3.gif) repeat-x center center
}
#chromemenu4 UL {
	BACKGROUND: url(chrometheme/chromebg4.gif) repeat-x center center
}
#chromemenu2 UL LI A {
	BACKGROUND: url(chrometheme/divider2.gif) no-repeat right center
}
#chromemenu3 UL LI A {
	BACKGROUND: url(chrometheme/divider3.gif) no-repeat right center
}
#chromemenu4 UL LI A {
	BACKGROUND: url(chrometheme/divider4.gif) no-repeat right center
}
.dropmenudiv {
	BORDER-RIGHT: #bbb 1 solid;
	BORDER-TOP: #bbb 1 solid;
	Z-INDEX: 100;
	FILTER: progid:DXImageTransform.Microsoft.Shadow(color=#CACACA,direction=135,strength=4);
	VISIBILITY: hidden; FONT: 13px/15px ;
	FONT-FAMILY: "MS Sans Serif";
	COLOR: #333333;
	BORDER-LEFT: #bbb 1 solid;
	WIDTH: 200px;
	BORDER-BOTTOM: #bbb 0 solid;
	POSITION: absolute;
	TOP: 0;
	BACKGROUND-COLOR: #d8e9ff
	
}
.dropmenudiv A {
	PADDING-RIGHT: 0px;
	DISPLAY: block;
	PADDING-LEFT: 0px;
	FONT-WEIGHT: bold;
	PADDING-BOTTOM: 2px;
	WIDTH: 100%;
	COLOR: #333333;
	TEXT-INDENT: 3px;
	PADDING-TOP: 2px;
	BORDER-BOTTOM: #bbb 1px solid; 
	TEXT-DECORATION: none; 
}
.dropmenudiv A:hover {
	BACKGROUND-COLOR: #f0f0f0
}
.bluetheme {
	BORDER-LEFT-COLOR: #959595; BORDER-BOTTOM-COLOR: #959595; BORDER-TOP-COLOR: #959595; BORDER-RIGHT-COLOR: #959595
}
.bluetheme A {
	BORDER-BOTTOM-COLOR: #959595
}
.bluetheme A:hover {
	BACKGROUND-COLOR: #ffe4e2
}
.greentheme {
	BORDER-LEFT-COLOR: #aded7c; BORDER-BOTTOM-COLOR: #aded7c; BORDER-TOP-COLOR: #aded7c; BORDER-RIGHT-COLOR: #aded7c
}
.greentheme A {
	BORDER-BOTTOM-COLOR: #aded7c
}
.greentheme A:hover {
	BACKGROUND-COLOR: #eafadc
}
.redtheme {
	BORDER-LEFT-COLOR: #e8bebe; BORDER-BOTTOM-COLOR: #e8bebe; BORDER-TOP-COLOR: #e8bebe; BORDER-RIGHT-COLOR: #e8bebe
}
.redtheme A {
	BORDER-BOTTOM-COLOR: #e8bebe
}
.redtheme A:hover {
	BACKGROUND-COLOR: #ffecec
}

Code chrome.js

//** Chrome Drop Down Menu- Author: Dynamic Drive (http://www.dynamicdrive.com)

//** Updated: July 14th 06' to v2.0
	//1) Ability to "left", "center", or "right" align the menu items easily, just by modifying the CSS property "text-align".
	//2) Added an optional "swipe down" transitional effect for revealing the drop down menus.
	//3) Support for multiple Chrome menus on the same page.

//** Updated: Nov 14th 06' to v2.01- added iframe shim technique

//** Updated: July 23rd, 08 to v2.4
	//1) Main menu items now remain "selected" (CSS class "selected" applied) when user moves mouse into corresponding drop down menu. 
	//2) Adds ability to specify arbitrary HTML that gets added to the end of each menu item that carries a drop down menu (ie: a down arrow image).
	//3) All event handlers added to the menu are now unobstrusive, allowing you to define your own "onmouseover" or "onclick" events on the menu items.
	//4) Fixed elusive JS error in FF that sometimes occurs when mouse quickly moves between main menu items and drop down menus

//** Updated: Oct 29th, 08 to v2.5 (only .js file modified from v2.4)
	//1) Added ability to customize reveal animation speed (# of steps)
	//2) Menu now works in IE8 beta2 (a valid doctype at the top of the page is required)

var cssdropdown={
disappeardelay: 250, //set delay in miliseconds before menu disappears onmouseout
dropdownindicator: '<img src="down.gif" border="0" />', //specify full HTML to add to end of each menu item with a drop down menu
enablereveal: [true, 5], //enable swipe effect? [true/false, steps (Number of animation steps. Integer between 1-20. Smaller=faster)]
enableiframeshim: 1, //enable "iframe shim" in IE5.5 to IE7? (1=yes, 0=no)

//No need to edit beyond here////////////////////////

dropmenuobj: null, asscmenuitem: null, domsupport: document.all || document.getElementById, standardbody: null, iframeshimadded: false, revealtimers: {},

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;
},

css:function(el, targetclass, action){
	var needle=new RegExp("(^|s+)"+targetclass+"($|s+)", "ig")
	if (action=="check")
		return needle.test(el.className)
	else if (action=="remove")
		el.className=el.className.replace(needle, "")
	else if (action=="add" && !needle.test(el.className))
		el.className =" "+targetclass
},

showmenu:function(dropmenu, e){
	if (this.enablereveal[0]){
		if (!dropmenu._trueheight || dropmenu._trueheight<10)
			dropmenu._trueheight=dropmenu.offsetHeight
		clearTimeout(this.revealtimers[dropmenu.id])
		dropmenu.style.height=dropmenu._curheight=0
		dropmenu.style.overflow="hidden"
		dropmenu.style.visibility="visible"
		this.revealtimers[dropmenu.id]=setInterval(function(){cssdropdown.revealmenu(dropmenu)}, 10)
	}
	else{
		dropmenu.style.visibility="visible"
	}
	this.css(this.asscmenuitem, "selected", "add")
},

revealmenu:function(dropmenu, dir){
	var curH=dropmenu._curheight, maxH=dropmenu._trueheight, steps=this.enablereveal[1]
	if (curH<maxH){
		var newH=Math.min(curH, maxH)
		dropmenu.style.height=newH "px"
		dropmenu._curheight= newH + Math.round((maxH-newH)/steps) + 1
	}
	else{ //if done revealing menu
		dropmenu.style.height="auto"
		dropmenu.style.overflow="hidden"
		clearInterval(this.revealtimers[dropmenu.id])
	}
},

clearbrowseredge:function(obj, whichedge){
	var edgeoffset=0
	if (whichedge=="rightedge"){
		var windowedge=document.all && !window.opera? this.standardbody.scrollLeft this.standardbody.clientWidth-15 : window.pageXOffset window.innerWidth-15
		var dropmenuW=this.dropmenuobj.offsetWidth
		if (windowedge-this.dropmenuobj.x < dropmenuW)  //move menu to the left?
			edgeoffset=dropmenuW-obj.offsetWidth
	}
	else{
		var topedge=document.all && !window.opera? this.standardbody.scrollTop : window.pageYOffset
		var windowedge=document.all && !window.opera? this.standardbody.scrollTop this.standardbody.clientHeight-15 : window.pageYOffset window.innerHeight-18
		var dropmenuH=this.dropmenuobj._trueheight
		if (windowedge-this.dropmenuobj.y < dropmenuH){ //move up?
			edgeoffset=dropmenuH+obj.offsetHeight
			if ((this.dropmenuobj.y-topedge)<dropmenuH) //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.hidemenu() //hide menu
	this.clearhidemenu()
	this.dropmenuobj=document.getElementById(dropmenuID) //reference drop down menu
	this.asscmenuitem=obj //reference associated menu item
	this.showmenu(this.dropmenuobj, 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.iframeshimadded){
		if (this.dropmenuobj.style.visibility=="visible"){
			this.shimobject.style.width=this.dropmenuobj.offsetWidth "px"
			this.shimobject.style.height=this.dropmenuobj._trueheight "px"
			this.shimobject.style.left=parseInt(this.dropmenuobj.style.left) "px"
			this.shimobject.style.top=parseInt(this.dropmenuobj.style.top) "px"
			this.shimobject.style.display="block"
		}
	}
},

hideshim:function(){
	if (this.iframeshimadded)
		this.shimobject.style.display='none'
},

isContained:function(m, e){
	var e=window.event || e
	var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
	while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
	if (c==m)
		return true
	else
		return false
},

dynamichide:function(m, e){
	if (!this.isContained(m, e)){
		this.delayhidemenu()
	}
},

delayhidemenu:function(){
	this.delayhide=setTimeout("cssdropdown.hidemenu()", this.disappeardelay) //hide menu
},

hidemenu:function(){
	this.css(this.asscmenuitem, "selected", "remove")
	this.dropmenuobj.style.visibility='hidden'
	this.dropmenuobj.style.left=this.dropmenuobj.style.top="-1000px"
	this.hideshim()
},

clearhidemenu:function(){
	if (this.delayhide!="undefined")
		clearTimeout(this.delayhide)
},

addEvent:function(target, functionref, tasktype){
	if (target.addEventListener)
		target.addEventListener(tasktype, functionref, false);
	else if (target.attachEvent)
		target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)});
},

startchrome:function(){
	if (!this.domsupport)
		return
	this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
	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")
				var asscdropdownmenu=document.getElementById(relvalue)
				this.addEvent(asscdropdownmenu, function(){cssdropdown.clearhidemenu()}, "mouseover")
				this.addEvent(asscdropdownmenu, function(e){cssdropdown.dynamichide(this, e)}, "mouseout")
				this.addEvent(asscdropdownmenu, function(){cssdropdown.delayhidemenu()}, "click")
				try{
					menuitems[i].innerHTML=menuitems[i].innerHTML+" "+this.dropdownindicator
				}catch(e){}
				this.addEvent(menuitems[i], function(e){ //show drop down menu when main menu items are mouse over-ed
					if (!cssdropdown.isContained(this, e)){
						var evtobj=window.event || e
						cssdropdown.dropit(this, evtobj, this.getAttribute("rel"))
					}
				}, "mouseover")
				this.addEvent(menuitems[i], function(e){cssdropdown.dynamichide(this, e)}, "mouseout") //hide drop down menu when main menu items are mouse out
				this.addEvent(menuitems[i], function(){cssdropdown.delayhidemenu()}, "click") //hide drop down menu when main menu items are clicked on
			}
		} //end inner for
	} //end outer for
	if (this.enableiframeshim && document.all && !window.XDomainRequest && !this.iframeshimadded){ //enable iframe shim in IE5.5 thru IE7?
		document.write('<IFRAME id="iframeshim" src="about:blank" frameBorder="0" scrolling="no" style="left:0; top:0; position:absolute; display:none;z-index:90; background: transparent;"></IFRAME>')
		this.shimobject=document.getElementById("iframeshim") //reference iframe object
		this.shimobject.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'
		this.iframeshimadded=true
	}
} //end startchrome

}


Rubik59 13-11-2014 11:26:35

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
รูปไม่ขึ้น รบกวนดูผ่านลิงค์นะครับ

อันนี้รันผ่าน Chrome

http://image.ohozaa.com/view2/xXYCIHKBN3NdyP8f

อันนี้ผ่าน Broswer อื่น

http://image.ohozaa.com/view2/xXYKcJVkYrCRidVR


rubik59 13-11-2014 11:29
 ความคิดเห็นที่ 2
อาจจะเป็นกับ css หรือเปล่า

ลองเพิ่มค่า ตรง z-index ดู อาจจะใช้ค่ามากๆ จาก 100 เป็น 9999

 Z-INDEX: 100;  


ninenik 13-11-2014
 ความคิดเห็นที่ 3
ลองเปลี่ยนเป็น 9999 แล้วก็ยังเหมือนเดิมเลยครับ 


rubik59 13-11-2014 13:33
 ความคิดเห็นที่ 4
ไม่สนใจลองแบบโค้ดง่ายๆ ของเว็บนี้ดู

CSS สร้างเมนูแนวนอน 2 ชั้นโดยไม่ใช้ javascript และตาราง table 
https://www.ninenik.com/content.php?arti_id=144 via @ninenik

หรือ

เปลี่ยนเมนูแนวนอน 2 ชั่น เมื่อเลื่อน scroll bar ในเพจ อย่างง่าย 
https://www.ninenik.com/content.php?arti_id=547 via @ninenik

หรือแบบประยุกต์ง่ายๆ

ตัวอย่าง



1. ไฟล์ mydropdown.css

ul.v_menu{ /* กำหนดขอบเขตของเมนู */    
    display: block;  
    width: 100%;      
    list-style:none;    
    margin:0px;    
    padding:0px;    
    font-family:tahoma, "Microsoft Sans Serif", Vanessa;    
    font-size:12px;    
    z-index: 9999;      
    background-color: #8671EF;  
    height: 32px;      
    border-bottom: 1px #7A6DDC dashed;    
}    
ul.v_menu > li{ /* กำหนดรูปแบบให้กับเมนูหลัก */    
    display:block;    
    width:150px;    
    height:32px;    
    text-indent:5px;    
    background-color:#8671EF;    
    float:left;    
    text-align:center;    
    transition: all 0.3s      
}    
ul.v_menu > li:hover{ /* กำหนดรูปแบบให้กับเมนูเมื่อมีเมาส์อยู่เหนือ */    
    display:block;    
    width:150px;    
    text-indent:5px;    
    background-color:#B2A8FE;    
    float:left;    
    text-align:center;      
}    
ul.v_menu > li > a,ul.v_menu > li > ul > li > a{ /* กำหนดรูปแบบให้กับลิ้งค์ */    
    display:block;    
    width:150px;    
    height:32px;            
    text-decoration:none;    
    color:#FFFFFF;    
    line-height:30px;    
    border-bottom: 1px #B2A8FE dashed;      
}    
ul.v_menu > li > ul{     
    display:none;    
    list-style:none;    
    margin:0px;    
    padding:0px;    
    position: relative;  
}    
ul.v_menu > li:hover > ul {     
    display:block;    
    width:150px;    
}       
ul.v_menu > li > ul > li{ /* กำหนดรูปแบบให้กับเมนูย่อย */    
    display:block;    
    width:150px;    
    height:32px;    
    text-indent:5px;    
    background-color:#8671EF;    
    border-bottom: 1px #FFFFFF dashesed;  
    float:left;    
    text-align:center;    
    transition: all 0.3s      
}    
ul.v_menu > li > ul > li:hover{ /* กำหนดรูปแบบให้กับเมนูย่อยเมื่อเมาส์อยู่เหนือ */    
    display:block;    
    width:150px;    
    height:32px;        
    text-indent:5px;    
    background-color:#B2A8FE;    
    float:left;    
    text-align:center;    
}      


2. ไฟล์ทดสอบ test_dropdown.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="mydropdown.css">
    <style type="text/css">
    body,html{    
        margin:0;    
        padding:0;      
        font-family:Tahoma, Geneva, sans-serif;    
        font-size:12px;    
    }    
    </style>    
</head>
<body>
 
<div style="margin:auto;width:750px;">  
<ul class="v_menu">    
    <li><a href="#">Link menu item 1</a>    
        <ul>    
            <li><a href="#">Sub menu item 1</a></li>    
            <li><a href="#">Sub menu item 2</a></li>    
            <li><a href="#">Sub menu item 3</a></li>    
            <li><a href="#">Sub menu item 4</a></li>    
        </ul>     
    </li>    
    <li><a href="#">Link menu item 2</a></li>    
    <li><a href="#">Link menu item 3</a>    
        <ul>    
            <li><a href="#">Sub menu item 1</a></li>    
            <li><a href="#">Sub menu item 2</a></li>    
            <li><a href="#">Sub menu item 3</a></li>    
            <li><a href="#">Sub menu item 4</a></li>            
            <li><a href="#">Sub menu item 5</a></li>    
            <li><a href="#">Sub menu item 6</a></li>    
            <li><a href="#">Sub menu item 7</a></li>    
            <li><a href="#">Sub menu item 8</a></li>        
        </ul>         
    </li>    
    <li><a href="#">Link menu item 4</a></li>               
</ul>   
</div>      
         
    
</body>
</html>



 


ninenik 13-11-2014
 ความคิดเห็นที่ 5
แก้ได้ละครับ ต้องแก้ที่ไฟล์ chrome.js ตรง dropit:function ขอบคุณมากๆนะครับที่มาตอบ 


rubik59 13-11-2014 14:02
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ