Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Всплывание событий в IE и Opera (https://javascript.ru/forum/dom-window/29448-vsplyvanie-sobytijj-v-ie-i-opera.html)

starjons 28.06.2012 10:29

Всплывание событий в IE и Opera
 
Здравствуйте, прошу помочь разобраться с проблемой и заранее благодарю за идеи.
У меня есть такая модель Dom

<div class="page">
<div>......</div><div>......</div><div>......</div>
</div>
<div class="page">
<div>......</div><div>......</div><div>......</div>
</div>
<div class="page">
<div>......</div><div>......</div><div>......</div>
</div>

Вложенные дивы имеют position=absolute и пересекаются произвольным образом. Я вешаю обработчик по клику
$(".page").click(function(e) { ..... }) и при нажатии на вложенные div-ы во всех браузерах происходит всплытие события до $(".page").click (естественно не только до этого места, но это и не важно сейчас). Это то, что мне нужно
Далее так же есть кнопка с событием onclick=SetMove(), по которой все вложенные div переопределяют свои события.
function SetMove()
{
	var dt = new Date();
	var but = document.getElementsByTagName('input');
	var len = but.length;
	for( var i=0; i<len; i++ )
	{
		id = but[i].id;
		if( id == 'save' ) but[i].disabled = false;
		if( id == 'set' ) but[i].style.display = 'none';
		if( id == 'clear' ) but[i].style.display = '';
	}

	var mods = document.getElementsByTagName('div');
	var len = mods.length;
	for( var i=0; i<len; i++ ) if( mods[i].parentNode.className == 'page' )
	{
		mods[i].onmousedown = SetModMove;
		
		var child = mods[i].getElementsByTagName('a');
		for( var j=0; j<child.length; j++ ) 
		{
			if( child[j].onmousedown ) child[j].style.display = 'none';
		}
	}
	document.getElementById('spec_form').className = 'form_edit';
	document.getElementById('difPrint').style.display = 'none';
}



function SetModMove(e)
{
	if( !e ) e = window.event;
	if( e.preventDefault ) e.preventDefault();
	real_x = this.offsetLeft;
	real_y = this.offsetTop;
	dx = e.clientX - real_x;
	dy = e.clientY - real_y;

	drag_obj = this;
	
	this.style.zIndex = 10000;
	this.parentNode.style.zIndex = 10000;
	this.parentNode.style.overflow = 'visible';
	if( this.className.substr(0,6) != 'moderr' && this.className.substr(0,7) != 'mod_add' )
	{
		this.className = 'mod_moved';
	}
	
	document.onmouseup = ClearModMove;
	document.onmousemove = ModMove;

	if( document.addEventListener ) document.addEventListener("onmousemove",ModMove,false);

}

function ModMove(e)
{
	if( !e ) e = window.event;
if( e.preventDefault ) e.preventDefault();
	
	drag_obj.style.left = e.clientX - dx;
	drag_obj.style.top = e.clientY - dy;
		
	return false;
}

СУТЬ ПРОБЛЕМЫ: после нажатия на кнопку переопределения событий, не происходит всплытия до первоначального клика по .page. То есть я думаю о том, что где то переопределяется клик по вложенному div-у и не происходит дальнейшего всплытия, а где - не могу понять. Прошу помощи.

З.Ы. Так же пробовала комментировать if( e.preventDefault ) e.preventDefault(); чтобы обработчики по умолчанию не предотвращались - но все равно Опера и ИЕ упорно не работают


Часовой пояс GMT +3, время: 09:24.