Javascript.RU

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

Всплывание событий в 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(); чтобы обработчики по умолчанию не предотвращались - но все равно Опера и ИЕ упорно не работают

Последний раз редактировалось starjons, 28.06.2012 в 10:53.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
screen.width в браузере opera cyklop77 Javascript под браузер 27 12.05.2018 00:03
проблемы с меню в opera Semen Элементы интерфейса 22 04.06.2012 23:20
Opera не выполняет style.fontSize=... в поле input Маэстро Opera, Safari и др. 6 20.06.2011 12:03
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 19:03
Не возвращается XML-ответ в Opera после AJAX-запроса Yojik Общие вопросы Javascript 4 17.03.2008 05:56