Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Передача аргумента методу при назначении события (https://javascript.ru/forum/events/12835-peredacha-argumenta-metodu-pri-naznachenii-sobytiya.html)

eval 04.11.2010 20:27

Передача аргумента методу при назначении события
 
Доброго времени суток )) помогите новичку :)
document.getElementById("dehide"+i+a).onmouseover= EventsMenu;
в таком состоянии работает прекрасно , а пытаясь сделать
document.getElementById("dehide"+i+a).onmouseover= EventsMenu(arg);
не получается...
варианты типа написать событие в html и передать там аргумент не предлагайте...
только в js
заранее спасибо...

Sweet 04.11.2010 20:40

То, что ты хочешь сделать - бред!!! Если сможешь привести то, где у тебя проблема в 5-7 строчек кода, я постараюсь помочь сделать нормально

eval 04.11.2010 20:56

мне нада узнать какое событие отрабатывает и на каком елементе без хтмл для создания div:hover IE 6-му (в нём собственно и проблема)
мне нужно узнать какое событие сработало over или out и на каком елементе - что-то типа такого:
var IE6=/IE 6/;
if(IE6.test(navigator.userAgent)){		
//if(over && this.id){ где over или out - событие которое надо узнать...
 document.getElementById(this.id).style.backgroundColor = "#8000FF";
//}else{
 document.getElementById(this.id).style.backgroundColor = "#000000";
//} 
}

Sweet 04.11.2010 21:06

Непонятно только, зачем arg??? Сделай так:
var IE6=/IE 6/;
if(IE6.test(navigator.userAgent)){
  if(this.style.backgroundColor == "#8000FF") this.style.backgroundColor = "#000000";
  else this.style.backgroundColor = "#8000FF";
};

eval 04.11.2010 21:21

спасибо конечно но это немного не то...
window.onload = function()
{

	var menuElems=document.getElementById('menu').getElementsByTagName('td');
	for(i=0;i<menuElems.length-1;i++){
	document.getElementById("main"+i).onmouseover=EventsMenu;
	document.getElementById("main"+i).onmouseout=EventsMenu;
	var sub_menu=document.getElementById('hide'+i).getElementsByTagName('div').length;
		for(a=0;a<sub_menu;a++){
	    document.getElementById("dehide"+i+a).onmouseover=EventsMenu;
	    document.getElementById("dehide"+i+a).onmouseout=EventsMenu;
	    }
	}
}
function EventsMenu(){
	var pattern=/main/;
	if(pattern.test(this.id))
	{
		var MainId=this.id.substr(4,1);
		show('hide'+MainId,135,5);
	}
	else
	{
		var MainId=this.id.substr(2,5);
		show(MainId,135,5);
		var IE6=/IE 6/;
		if(IE6.test(navigator.userAgent)){ 
		  if(this.style.backgroundColor = "#232323") {this.style.backgroundColor = "#8000FF";}
		  else {this.style.backgroundColor = "#232323";}
		}
	}
}

не отработал скрипт...(( хотя это и так было понятно !!!
дело в том что метод show вызывается по нескольку раз для поддерживания определённого эффекта... для того то мне и нада определять связку (событие + элемент)

monolithed 04.11.2010 21:31

А вообще так делать не нужно!

<div class="class1"></div>
<style type="text/css">
div{width: 100px; height: 100px;}
.class1 {background: #000000;}
.class2 {background: #8000FF;}
</style>

<script type="text/javascript">
window.onload = function(){
    if(!/IE(6).+Win/.test(navigator.userAgent)){
        var input = document.getElementsByTagName('div')[0];
        var items = ["mouseover", "mouseout"];
        for (var i = 0; i < items.length; i++){
            (function(){
                var item = items[i];
                input['on'+item] = function(){
                    this.className = (this.className == 'class2') ? 'class1' : 'class2';
                };
            })();
        }
    }
};

</script>

Sweet 04.11.2010 21:45

Стоп! Это меню что ли? Тогда почему бы не сделать его через ссылки? Тогда и в ie6 все нормально будет

eval 04.11.2010 23:42

спасибо вы оба натолкнули меня на разные варианты реализации ... всё-таки вариант с ссылками гораздо проще) + проверка браузера и подгрузка i6.css только при IE6 !!! что бы не мусорил html)

vladlen 10.11.2010 20:01

Есть еще "идиотский" способ оборачивать любой элемент условными комментами с тегом А.

eval 11.11.2010 07:03

для наглядности приведу кусочек кода с метода ... для тех кто считал что этот способ для "..." сами понимаете =))))))))
dd.prototype.init=function(p,c){
		a=c; var w=document.getElementById(p), s=w.getElementsByTagName('ul'), l=s.length, i=0;
		for(i;i<l;i++){
			var h=s[i].parentNode; this.h[i]=h; this.c[i]=s[i];
			h.onmouseover=new Function(this.n+'.st('+i+',true)');
			h.onmouseout=new Function(this.n+'.st('+i+')');
		}
	}

обратите внимание на назначение событий элементам и передача аргумента при этом... это ведь то что я спрашивал в самом начале темы ) оказалось что мне нада эти аргументы не только для hovera, но и для построения правильной логики скрипта!
всем спасибо за внимание)


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