Динамическое создание элементов 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, время: 09:01. |