Witam!
Podczas tworzenia menu nawigacyjnego do swojej strony, napotkalem nastepujace problemy:
1. Aby otworzyc menu zwyklym onClick'iem, nalezy kliknac button az dwa razy - niestety za pierwszym kompletnie nic sie nie dzieje, co moze byc nie tak ?
2. Klikniecie tla elementu w menu powoduje zamkniecie menu. Mozna to zauwazyc na przykladzie "Menu 1", gdzie "1" to rodzic, a "2" i "3" to elementy podlegle. Probowalem przeroznych sposobow aby klikniecie tych elementow nie powodowalo chowania menu, mimo ze moje starania spelzly na niczym, nasunal mi sie prosty wniosek. Przyczyna jest osadzenie elementow menu w znacznikach. Pytanie brzmi wiec, jak brac pod uwage divy zawarte w divie ?
Chodzi o ta funkcje:
document.onclick = function(e) {
var obj = document.all ? event.srcElement : e.target;
if (obj != menu_id && obj != ch)
{
var opened_menu = registered_menus.pop();
var close_menu_id = document.getElementById("sub" + opened_menu);
close_menu_id.style.display = "none";
return false;
}
}
Link do menu:
klik.
Caly kod:
<script type="text/javascript">
var registered_menus = Array();
////////////////////////
// Pokaz / ukryj menu
////////////////////////
function showMenu(ch) {
var menu_ident = ch.id;
var menu_name = "sub" + menu_ident;
var menu_id = document.getElementById(menu_name);
var menu_width = menu_id.style.width.substring(0,3);
var button_width = document.getElementById(menu_ident).offsetWidth;
var button_height = document.getElementById(menu_ident).offsetHeight;
document.onclick = function(e) {
var obj = document.all ? event.srcElement : e.target;
if (obj != menu_id && obj != ch)
{
var opened_menu = registered_menus.pop();
var close_menu_id = document.getElementById("sub" + opened_menu);
close_menu_id.style.display = "none";
return false;
}
}
if (menu_id.style.display == 'none')
{
var opened_menu = registered_menus.pop();
var close_menu_id = document.getElementById("sub" + opened_menu);
if (opened_menu != null)
{
close_menu_id.style.display = "none";
}
registered_menus.push(ch.id)
menu_id.style.left = getposOffset(ch, 'left');
menu_id.style.top = getposOffset(ch, 'top') + button_height + "px";
menu_id.style.display = "block";
return false;
}
else
{
menu_id.style.display = "none"
return false;
}
}
///////////////////////////
// Ustal wspolrzedne menu
///////////////////////////
function getposOffset(ch, t) {
var totaloffset = (t == 'top') ? ch.offsetTop : ch.offsetLeft;
var offParent = ch.offsetParent;
while (offParent != null)
{
if(t == 'left')
{
totaloffset = totaloffset + offParent.offsetLeft;
}
else
{
totaloffset = totaloffset + offParent.offsetTop;
}
offParent = offParent.offsetParent;
}
return totaloffset;
}
<span id="_menu_1" class="menu_button" onClick="showMenu(this);">Menu 1
</span> <span id="_menu_2" class="menu_button" onClick="showMenu(this);">Menu 2
</span>
<div id="sub_menu_1" class="menu">1.
<div class="menu_option" onclick="">2.
<a href="#">Odnosnik 1
</a><br></div> <div class="menu_option" onclick="">3.
<a href="#">Odnosnik 2
</a><br></div>
<div id="sub_menu_2" class="menu"> <div class="menu_option" onclick=""><a href="#">Odnosnik 1
</a><br></div> <div class="menu_option" onclick=""><a href="#">Odnosnik 2
</a><br></div>
Ten post edytował calvadone 25.05.2007, 18:34:33