JS. Передача обьекта/однозначных его признаков функции. Кроме name/id.

Бочонок

http://frontender.info
JS. Передача обьекта/однозначных его признаков функции. Кроме name/id.

Доброго времени суток.

Задался вот такой вот задачей:

Есть меню, активируемое как

PHP:
<div class='button_holder' onmouseout='close_block(this);' onmouseover='open_block(this);'>
...
</div>
И все бы хорошо... и применять легко и с id лишний раз не связываешься... да и просто красиво...
Но понадобиось мне закрывать его с небольшой задержкой.
И нарисовалось что то вроде:

PHP:
function close_block(obj){
if(obj.clock==undefined){obj.clock = window.setInterval("close_it_now('"+ ??? +"')", 250);}
}

И вот как, спрашивается, передать туда обьект или его идентификатор?
Да, конечно... Можно себе ввести уникальный id, передавать в ф-ю и горя не знать.
Только не нравится мне эта идея.
Если есть способ оставиьт систему простой и не ввобить лишние идентификаторы, то я так и хочу сделать.
Подскажите, как без введения дополнительных идентификаторой дива передать в ф-ю close_it_now сответствующий обьект?
Очень надеюсь на вашу помощь.

С уважением. Я.
 

BRat

o_0
1. http://developer.mozilla.org/en/docs/DOM:window.setInterval
2. Вводи id, это и есть уникальный идентификатор обьекта. Лишних id не бывает
 

Бочонок

http://frontender.info
2 - Вопрос в том есть ли способ обойтись БЕЗ этого?
Формировать id вида butt_01,butt_02... мне как то не хочется.
Я конечно не смневаюсь что это будет работать.
Но я хочу узнать какие есть альтернативы и на основе этого принять решение.

1. - к чему вы дали эту ссылку, не понял...

-~{}~ 25.02.07 15:09:

И - спасибо за ответ. :)

-~{}~ 25.02.07 15:11:

Ой... кажется понял.
Перечитываю еще раз внимательно!
Спасибо большое - сейчас попробую!
 

BRat

o_0
посмотри как параметры в setInterval передаются
ответ в том, что без этого обходиться не нужно
 

Бочонок

http://frontender.info
Что то ничего не вышло.
Кончтрукция вида:


PHP:
function close_it_now(obj){
alert('!');
if(obj.clock!=undefined){clearInterval(obj.clock);}
obj.className='button_holder';
}

function close_block(obj){
if(obj.clock==undefined){obj.clock = setInterval("close_it_now", 1000,obj);}
}
Ни к чему не привела.
Ни о каких ошибках error console FFа не сказал.
Но ничего и не произошло.
Ф-я просто не вызывается.
 

BRat

o_0
var intervalID = window.setInterval(animate, 500);

внимательней, первым параметром передается не название функции, а указатель на неё
 

BRat

o_0
а там придется передавать так
var intervalID = window.setInterval(animate(param1, param2), 500);
 

Бочонок

http://frontender.info
Понятно.
Спасибо вам большое.

Буду теперь думать как лучше делать.
 

dimagolov

Новичок
1. передавать this как параметр в функцию-обработчик события безсмысленно, так как для нее внутренний this будет указывать на объект это событие сгенерировавшее
2. а раз так, то this и можно предавать куда/то или запоминать в глобальой переменной как ссылку на объект подлежащий закрытию
 

Бочонок

http://frontender.info
Нашел еще одно интересное решение, Может кому то пригодится....

PHP:
Function.prototype.bind = function(object) {
    var method = this
    return function() {
        return method.apply(object, arguments) 
    }
}

function close_block(obj){
obj.clock = window.setInterval(close_it_now.bind(obj), 5000);
}

function close_it_now(){
if(this.clock!=undefined){clearInterval(this.clock);}
this.className='button_holder';
}
Оригинал:
http://xpoint.ru/know-how/JavaScript/PoleznyieFunktsii?35#ZadanieParametraThisDlyaCallba


2dimagolov:
Ход мысли и ее практическое применение остались загадкой.
Что, черт возьми, ты имел в виду? Заранее извени за непонятливость.
 

Scud

Новичок
Есть такое понятие как closure, вот его и надо использовать ;)
 

serglt

Анус, ой, Ахтунг
Да все гораздо проще можно сделать
PHP:
function my (o) {
    setInterval (function () { o.method ();}, interval);
}
 
Сверху