Доброго времени суток, дорогие форумчане. Решил организовать на сайте собственное контекстное меню, чтоб было красиво, удобно и никакой лишней писанины. Разметка меню выглядит так: Код (Text): <div class='context_menu' id='context_menu'> <div class='item_list' id='context_item_list'> <!--<div class='item ' id=''>пункт меню</div>--> </div> </div> А вот этим кодом на JS мы управляем меню Код (PHP): if(window.adm==1){ var a=document.querySelectorAll('.contact .header .str'); for(var i=0;i<a.length;i++){ a[i].addEventListener('contextmenu',function(e){ context_open(e); create_context(1,'f1',function(){ alert('f1 ok'); }); create_context(2,'f2',function(){ alert('f2 ok'); }); create_context(3,'f3',function(){ alert('f3 ok'); }); },false); } } function context_open(e){ e.preventDefault(); scout.$('context_menu').style.display='block'; scout.$('context_menu').style.top= e.clientY+scrollY-14+'px'; scout.$('context_menu').style.left=e.clientX+scrollX-14+'px'; window.addEventListener('mousemove',function zxc(e){ var el=scout.$('context_menu'); if((e.clientX<el.offsetLeft)||(e.clientY<el.offsetTop)||(e.clientX>el.offsetLeft+el.offsetWidth)||(e.clientY>el.offsetTop+el.offsetHeight)){ window.removeEventListener('mousemove',zxc,false); scout.$('context_menu').style.display='none'; scout.$('context_item_list').innerHTML=''; } },false); } function create_context(i,str,funct){ scout.$('context_item_list').innerHTML+="<div class='item' id='context_item"+i+"'>"+str+"</div>"; scout.$('context_item'+i).addEventListener('click',function(){funct();},false); } Вот ссылочка на cssdeck Все вроде хорошо. Но тут меня поджидала коварная неприятность. Дело в том, что функция, создающая пункт меню create_context в результате задает обработку события click только последнему пункту, а для всех предыдущих обработчик стирается. В общем сутки сижу ломаю голову что не так. Буду очень благодарен, если поможете разобраться в проблеме. =)
Под вечер туго соображаю, поэтому не очень пытался искать у вас ошибки, а сделал небольшую модификацию кода, а то как-то совсем грустно стало. В общем, посмотрите, поиграетесь, удалите лишнее или добавите своё...
А зачем вот тут Код (Text): if(createContentMenu(output, 'line')){ ... function createContentMenu(el, str){ str?
Не нужно это. Просто перед этим, я думал сделать передачу текстовых значения для пунктов меню, но потом понял, что это как бы не имеет смысла, а убрать забыл.