Передача аргумента методу при назначении события
Доброго времени суток )) помогите новичку :)
document.getElementById("dehide"+i+a).onmouseover= EventsMenu; в таком состоянии работает прекрасно , а пытаясь сделать document.getElementById("dehide"+i+a).onmouseover= EventsMenu(arg); не получается... варианты типа написать событие в html и передать там аргумент не предлагайте... только в js заранее спасибо... |
То, что ты хочешь сделать - бред!!! Если сможешь привести то, где у тебя проблема в 5-7 строчек кода, я постараюсь помочь сделать нормально
|
мне нада узнать какое событие отрабатывает и на каком елементе без хтмл для создания 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";
//}
}
|
Непонятно только, зачем arg??? Сделай так:
var IE6=/IE 6/;
if(IE6.test(navigator.userAgent)){
if(this.style.backgroundColor == "#8000FF") this.style.backgroundColor = "#000000";
else this.style.backgroundColor = "#8000FF";
};
|
спасибо конечно но это немного не то...
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 вызывается по нескольку раз для поддерживания определённого эффекта... для того то мне и нада определять связку (событие + элемент) |
А вообще так делать не нужно!
<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>
|
Стоп! Это меню что ли? Тогда почему бы не сделать его через ссылки? Тогда и в ie6 все нормально будет
|
спасибо вы оба натолкнули меня на разные варианты реализации ... всё-таки вариант с ссылками гораздо проще) + проверка браузера и подгрузка i6.css только при IE6 !!! что бы не мусорил html)
|
Есть еще "идиотский" способ оборачивать любой элемент условными комментами с тегом А.
|
для наглядности приведу кусочек кода с метода ... для тех кто считал что этот способ для "..." сами понимаете =))))))))
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, время: 04:17. |