[JS] Context menu errors

Pagina: 1
Acties:
  • 37 views sinds 30-01-2008

  • FunzoneQ!
  • Registratie: Oktober 2002
  • Laatst online: 15-11-2024
Ok, daar gaan we dan. Ik heb een probleem met mijn huidige context menu namelijk:
-Hij positioneerd zichzelf verkeerd
-Hij is alleen IE bestendig.

Aangezien ik sinds een tijdje zelf in Firebird surf is dit een probleem geworden ;)
Dus besloot ik op zoek te gaan naar een nieuw scriptje, om die weer aan te passen etc ('k ben geen javascript prog held). Ik stuitte op dit scriptje.
Nou goed. Ik wil het ding gaan gebruiken, maar mijn menu moet automatisch aanpassen, aangezien ik een wisselend UserId en IconId gebruik.

Daar heb ik dus dit scriptje voor:

[javascript]
function menuweergave(icoonId,creatorId){
var menuHTML = '<div><b>Menu</b></div><hr><div class="submenu" onclick="location.href(\'http://www.freshicons.com/forum/profile.php/?p=add2favorites&icoonId='+ icoonId +'\')">Add to favorite icons</div><div class="submenu" onClick="MyWindow=window.open(\'http://www.freshicons.com/popuprating.php?icoonId_popup='+ icoonId +'\',\'Rating_System\',\'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=200,height=260\'); return false;">Vote</div><div class="submenu" onclick="location.href(\'http://www.freshicons.com/forum/profile.php/'+ creatorId +'\')">View creators profile</div><hr><div class="submenu" onclick="location.href(\'http://www.freshicons.com/forum/profile.php/?p=setAvatar&icoonId='+ icoonId +'\')">Set as avatar</div><hr><div class="submenu" onclick="location.href(\'http://www.freshicons.com/admin/index.php?page=deadFiles&p=deleteFile&icoonId='+ icoonId +'\')">Delete icon</div><div class="submenu" onclick="location.href(\'http://www.freshicons.com/admin/index.php?page=categories&p=updateCat&icoonId='+ icoonId +'\')">Change categorie</div><hr><div class="submenu" OnClick="document.all.mess.style.visibility=\'hidden\'">Cancel</div>';

if (ie) document.all.mess.innerHTML=menuHTML
else if (ns6) document.getElementById("mess").innerHTML=menuHTML
}
[/javascript]

Swapt dus de HTML dmv InnerHTML. Werkt perfect

De 2e functie die ik gebruik is:

[javascript]
function go3(e){
var rightedge=ie5? document.body.clientWidth-event.clientX : window.innerWidth-e.clientX
var bottomedge=ie5? document.body.clientHeight-event.clientY : window.innerHeight-e.clientY


if (rightedge<menuobj.offsetWidth){
//move the horizontal position of the menu to the left by it's width
menuobj.style.left=ie5? document.body.scrollLeft+event.clientX-menuobj.offsetWidth : window.pageXOffset+e.clientX-menuobj.offsetWidth
}else{
//position the horizontal position of the menu where the mouse was clicked
menuobj.style.left=ie5? document.body.scrollLeft+event.clientX : window.pageXOffset+e.clientX
}

//same concept with the vertical position
if (bottomedge<menuobj.offsetHeight){
menuobj.style.top=ie5? document.body.scrollTop+event.clientY-menuobj.offsetHeight : window.pageYOffset+e.clientY-menuobj.offsetHeight
}else{
menuobj.style.top=ie5? document.body.scrollTop+event.clientY : window.pageYOffset+e.clientY
}
document.all.mess.style.visibility='visible'; return false
}
[/javascript]

Bovenaan de pagina staan de volgende vars gedefineerd:

[javascript]
var ie=document.all&&document.getElementById
var ie5=document.all&&document.getElementById
var ns6=document.getElementById&&!document.all
var menuobj=ie5? document.all.mess : menuobj=document.getElementById("mess")
[/javascript]

Normaal gesproken werd go3(); aangevraagd via dit scriptje:

[javascript]
if (ie5||ns6){
menuobj.style.display=''
document.oncontextmenu=showmenuie5
document.onclick=hidemenuie5
}
[/javascript]

Aangezien ik niet wil dat het op het contect menu gebeurd maar op een leftClick op de icon heb ik ervan gemaakt:

onclick="menuweergave(5118,532); go3();"

Alleen nu geeft hij in Firebird en IE de volgende fouten:

e has no properties.
op de eerste regel van go3()

Kan iemand mij helpen?

Bla


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 00:12

Pelle

🚴‍♂️

Wij gaan hier niet andermans scriptjes aan zitten passen voor jou, dat begrijp je natuurijk wel.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 11:04

crisp

Devver

Pixelated

nog een tip: zoek een beter script, of verdiep jezelf in javascript en met name in de verschillen tussen de event-models van IE en Mozilla.
document.all is alleen nog maar voor IE4 van belang, en je code bevat volgens mij ook dingen die alleen in NS4 zullen werken. Browser-sniffing is ook in de meeste gevallen niet meer nodig.

Intentionally left blank


Dit topic is gesloten.