gpt4 book ai didi

php - 动态创建的菜单下拉列表不起作用

转载 作者:行者123 更新时间:2023-11-30 06:31:03 25 4
gpt4 key购买 nike

我想在 javascript 中动态创建下拉 javascript 菜单。

我已经从 mysql 数据库在 php 中创建了一个 javascript 菜单项数组,现在我想使用 javascript 函数在我需要的时候动态创建菜单,这样我就可以更新菜单中的项目而不必使用服务器调用。

菜单构建良好并加载但下拉菜单不起作用

这是我的代码

创建数组的php代码

   <script>
var x=0;
var outermenuarray=new Array();
</script>
<?
$sql=mysql_query("SELECT * FROM pages WHERE template_ref='15' ORDER BY menu_pos ASC");
while($row=mysql_fetch_array($sql))
{
?>
<script>
var innermenuarray = new Array();
innermenuarray[0]="<? echo $row['page_ref']; ?>";
innermenuarray[1]="<? echo $row['menu_pos']; ?>";
innermenuarray[2]="<? echo $row['sub_menu_pos']; ?>";
innermenuarray[3]="<? echo $row['top_menu']; ?>";
innermenuarray[4]="<? echo $row['link']; ?>";
innermenuarray[5]="<? echo $row['indexpage']; ?>";

outermenuarray[x]=innermenuarray;
x++;
</script>
<?
}
?>

下拉菜单的CSS样式

    #jsddm{ 
margin: 0;
padding: 0
}

#jsddm li{
float: left;
list-style: none;
font: 12px Tahoma, Arial
}

#jsddm li a{
display: block;
background: #20548E;
padding: 5px 12px;
text-decoration: none;
border-right: 1px solid white;
width: 70px;
color: #EAFFED;
white-space: nowrap
}

#jsddm li a:hover{
background: #1A4473
}

#jsddm li ul{
margin: 0;
padding: 0;
position: absolute;
visibility: hidden;
border-top: 1px solid white
}

#jsddm li ul li{
float: none;
display: inline
}

#jsddm li ul li a{
width: auto;
background: #9F1B1B
}

#jsddm li ul li a:hover{
background: #7F1616
}

菜单的javascript

    var timeout    = 500;
var closetimer = 0;
var ddmenuitem = 0;

function jsddm_open()
{ jsddm_canceltimer();
jsddm_close();
ddmenuitem = $(this).find('ul').css('visibility', 'visible');}

function jsddm_close()
{ if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');}

function jsddm_timer()
{ closetimer = window.setTimeout(jsddm_close, timeout);}

function jsddm_canceltimer()
{ if(closetimer)
{ window.clearTimeout(closetimer);
closetimer = null;}}

$(document).ready(function()
{ $('#jsddm > li').bind('mouseover', jsddm_open)
$('#jsddm > li').bind('mouseout', jsddm_timer)});

document.onclick = jsddm_close;

最后是构建菜单的循环

    var innermenuhtml;
function createtopmenu(){
innermenuhtml='<ul id="jsddm">';
var t=0;
var s=0;
for(var h = 0; h <outermenuarray.length; h++)
{
if(outermenuarray[h][2]=='0'){
if(t>0){
innermenuhtml+='</li>';
}
t++;

if(s>0){
innermenuhtml+='</ul>';
}
s=0;
innermenuhtml+='<li><a href="#">'+outermenuarray[h][4]+'</a>';
}else{
if(s==0){
innermenuhtml+='<ul>';
s++;
}
innermenuhtml+= '<li><a href="#">'+outermenuarray[h][4]+'</a></li>';
}
}

innermenuhtml+='</ul>';

}

然后我调用函数来创建菜单并插入 div

    <div id="topmemnuitem"></div>
<script>
createtopmenu();
$(document).ready(function() {
var el = document.getElementById('topmemnuitem');
el.innerHTML = innermenuhtml;
});
</script>

如果我将循环的结果硬编码到菜单中,下拉菜单可以正常工作,但是当我用循环构建它时,下拉菜单不起作用

有人知道为什么吗?我似乎看不出为什么这不起作用

最佳答案

我已经使用@Mark Rijsmus 发布的帮助解决了这个问题。基本上我只是移动了

  var timeout    = 500;
var closetimer = 0;
var ddmenuitem = 0;

function jsddm_open()
{ jsddm_canceltimer();
jsddm_close();
ddmenuitem = $(this).find('ul').css('visibility', 'visible');}

function jsddm_close()
{ if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');}

function jsddm_timer()
{ closetimer = window.setTimeout(jsddm_close, timeout);}

function jsddm_canceltimer()
{ if(closetimer)
{ window.clearTimeout(closetimer);
closetimer = null;}}

$(document).ready(function()
{ $('#jsddm > li').bind('mouseover', jsddm_open)
$('#jsddm > li').bind('mouseout', jsddm_timer)});

document.onclick = jsddm_close;

到里面

<div id="topmemnuitem"></div>
<script>
createtopmenu();
$(document).ready(function() {
var el = document.getElementById('topmemnuitem');
el.innerHTML = innermenuhtml;
});
</script>

在 el.innerHTML = innermenuhtml 之后;而且效果很好

关于php - 动态创建的菜单下拉列表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637074/

25 4 0