Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.11.2010, 22:28
Новичок на форуме
Отправить личное сообщение для Crudelis Посмотреть профиль Найти все сообщения от Crudelis
 
Регистрация: 12.11.2010
Сообщений: 5

Динамическое создание элементов 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>


Есть див, при нажатии в котором создается ещё один див, я хочу реализовать чтоб при нажатии на дочерний див он исчезал. В моем коде он исчезает, но событие передается в родительский див и создается новый элемент. Помогите, как исправить
Ответить с цитированием
  #2 (permalink)  
Старый 12.11.2010, 23:20
Аватар для vladlen
Кандидат Javascript-наук
Отправить личное сообщение для vladlen Посмотреть профиль Найти все сообщения от vladlen
 
Регистрация: 19.10.2010
Сообщений: 143

Ну так тебе у родителя надо отменить
div.setAttribute('onclick','editItem(this)');
после создания внутреннего дива
Либо еще правильней
function editItem(ev){
 if(!ev) ev=window.event;
 var contain = document.getElementById('container');
 contain.removeChild(ev);
 return false;
}

В общем тут написано все хорошо
__________________
Если хочешь что-то сделать - сделай это…
Ответить с цитированием
  #3 (permalink)  
Старый 12.11.2010, 23:31
Новичок на форуме
Отправить личное сообщение для Crudelis Посмотреть профиль Найти все сообщения от Crudelis
 
Регистрация: 12.11.2010
Сообщений: 5

vladlen,
дело в том что пользователь должен как удалять так и создавать элементы потом, если я отменю у родителя onclick то как потом пользователь создаст див, пробовал как в статье пишут применить:
ev.stopPropagation ? ev.stopPropagation() : (ev.cancelBubble=true)
тоже самое мозила удаляет и создает новый див, почему то события не прекращаются после удаления дива
Ответить с цитированием
  #4 (permalink)  
Старый 12.11.2010, 23:36
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от vladlen
Ну так тебе у родителя надо отменить
В качестве родителя выступает главный контейнер, поэтому удаляться будет именно он, а новые элементы добавляются как дочерние для родительского элемента и сестринские для дочерних.
Ответить с цитированием
  #5 (permalink)  
Старый 12.11.2010, 23:39
Новичок на форуме
Отправить личное сообщение для Crudelis Посмотреть профиль Найти все сообщения от Crudelis
 
Регистрация: 12.11.2010
Сообщений: 5

monolithed,
дело в том что дочерние дивы создаются, но после нажатия на них они удаляются и событие идет дальше на родительский див и опять создается новый див
Ответить с цитированием
  #6 (permalink)  
Старый 12.11.2010, 23:55
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Уже поздно, спать пошел, но оставлю небольшую наводку, которая возможно поможет разъяснить ситуацию:

<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: обратить внимание на событие после повторного клика на созданный элемент

Последний раз редактировалось monolithed, 12.11.2010 в 23:57.
Ответить с цитированием
  #7 (permalink)  
Старый 12.11.2010, 23:56
Новичок на форуме
Отправить личное сообщение для Crudelis Посмотреть профиль Найти все сообщения от Crudelis
 
Регистрация: 12.11.2010
Сообщений: 5

справился, я в создаваемый див добавил div.setAttribute('onclick','editItem(this,event)') ;
в качестве параметров элемент и эвент, всем спасибо)))
Ответить с цитированием
  #8 (permalink)  
Старый 13.11.2010, 02:28
Аватар для vladlen
Кандидат Javascript-наук
Отправить личное сообщение для vladlen Посмотреть профиль Найти все сообщения от vladlen
 
Регистрация: 19.10.2010
Сообщений: 143

Молодец, я и хотел сказать что тебе и нужен stopPropagation()
__________________
Если хочешь что-то сделать - сделай это…
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DOM, определение стиля элементов Maximor17 Общие вопросы Javascript 3 04.11.2010 16:24
динамическое создание элементов sg550 Events/DOM/Window 28 02.08.2010 19:34
Динамическое создание script src RaiDeR Общие вопросы Javascript 11 22.04.2009 17:04
IE: создание элементов. Jurasmi Events/DOM/Window 12 28.11.2008 02:10
Создание элементов createElement в IE. Phoenix Общие вопросы Javascript 6 26.09.2007 19:43