Динамическое создание элементов DOM
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Документ без названия</title> <style> #create{ position:absolute; width:24px; height:24px; top:0; left:0; background-color:#00F; } #container{ width:400px; height:400px; border:1px dashed #63C; } </style> <script> function createElem(event) { if(!event) event = window.event; var dcont = document.getElementById('container'); var div = document.createElement('div'); div.setAttribute('id','create'); div.setAttribute('onclick','editItem(this)'); //div.setAttribute('onmousedown','grabElem()'); //div.setAttribute('onmouseup','dropElem()'); div.style.left = event.clientX+'px'; div.style.top = event.clientY+'px'; dcont.appendChild(div); return false; } function editItem(ev){ if(!ev) ev=window.event; var contain = document.getElementById('container'); contain.removeChild(ev); return true; } </script> </head> <body> <div id="container" onclick="createElem(event)"></div> </body> </html> Есть див, при нажатии в котором создается ещё один див, я хочу реализовать чтоб при нажатии на дочерний див он исчезал. В моем коде он исчезает, но событие передается в родительский див и создается новый элемент. Помогите, как исправить |
Ну так тебе у родителя надо отменить
div.setAttribute('onclick','editItem(this)');после создания внутреннего дива Либо еще правильней function editItem(ev){ if(!ev) ev=window.event; var contain = document.getElementById('container'); contain.removeChild(ev); return false; } В общем тут написано все хорошо |
vladlen,
дело в том что пользователь должен как удалять так и создавать элементы потом, если я отменю у родителя onclick то как потом пользователь создаст див, пробовал как в статье пишут применить: ev.stopPropagation ? ev.stopPropagation() : (ev.cancelBubble=true) тоже самое мозила удаляет и создает новый див, почему то события не прекращаются после удаления дива |
Цитата:
|
monolithed,
дело в том что дочерние дивы создаются, но после нажатия на них они удаляются и событие идет дальше на родительский див и опять создается новый див |
Уже поздно, спать пошел, но оставлю небольшую наводку, которая возможно поможет разъяснить ситуацию:
<style type="text/css"> #container{ width:400px; height:400px; border:1px dashed #63C; } .create { background-color:#00F; position:absolute; width:24px; height:24px; top:0; left:0; } </style> <script type="text/javascript"> window.onload = function(){ var container = document.getElementById('container'); var childs = container.getElementsByTagName('div'); container.onclick = function(event){ var event = event ||window.event; var div = document.createElement('div'); div.setAttribute('class','create'); div.style.left = event.clientX+'px'; div.style.top = event.clientY+'px'; this.appendChild(div); for(i=0; i<childs.length; i++){ childs[i].onclick = function(i){ return function(){ alert(i + ' : ' +this.offsetTop+'x'+this.offsetLeft); }; }(i); } }; }; </script> <div id="container"></div> PS: обратить внимание на событие после повторного клика на созданный элемент |
справился, я в создаваемый див добавил div.setAttribute('onclick','editItem(this,event)') ;
в качестве параметров элемент и эвент, всем спасибо))) |
Молодец, я и хотел сказать что тебе и нужен stopPropagation()
|
Часовой пояс GMT +3, время: 22:32. |