Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Меню Onclick (https://javascript.ru/forum/dom-window/1519-menyu-onclick.html)

Levin 18.08.2008 17:35

У меня по непонятной причине setTimeout вообще никаких движений не производит, пробовал уже просто в функцию его вставить, ноль реакции
lis[i].onmouseout=function() {
			setTimeout("alert('gbhh')",3000);
			this.className=this.className.replace(new RegExp(" iehover\\b"), "");

Андрей Параничев 18.08.2008 17:48

Levin,
У вас ошибка где-то в другом месте, потому что вызов:
setTimeout("alert('gbhh')",3000);

Работает.

Levin 18.08.2008 17:52

Упс, извеняюсь, он в Firefox не работает почему то, в IE работает. Но от этого не легче. Мне надо вставить, насколько я понимаю, setTimeout в строку
this.className=this.className.replace(new RegExp(" iehover\\b"), "");

я прав?

ZoNT 18.08.2008 18:33

Цитата:

Сообщение от Levin (Сообщение 4691)
У меня по непонятной причине setTimeout вообще никаких движений не производит, пробовал уже просто в функцию его вставить, ноль реакции
lis[i].onmouseout=function() {
			setTimeout("alert('gbhh')",3000);
			this.className=this.className.replace(new RegExp(" iehover\\b"), "");

lis[i].onmouseout=function() {
		setTimeout("alert('gbhh')",3000);
		this.className=this.className.replace(/ iehover\b/, "");
}


Должно работать!

Levin 18.08.2008 19:08

To ZoNT: поздравляю с новой ученой степенью :-)
setTimeout работает (правда в Firefox не хочет, но это не важно пока).

Цитата:

Сообщение от ZoNT (Сообщение 4306)
вешаешь закрытие (смену класса) на таймаут и всё (смотри setTimeout)

Смена класса производится в строке
this.className=this.className.replace(new RegExp(" iehover\\b"), "");

, и setTimeout неодходимо внедрить сюда. Верно?

Андрей Параничев 18.08.2008 19:19

Levin,
Вам тут нужно будет применить хитрость, для передачи элемента в нужную область видимости:
lis[i].onmouseout = function() {
        setTimeout(function(element) {
            return function() {
                element.className=element.className.replace(/ iehover\b/, "");
            }
        }(this),3000);
}

Levin 18.08.2008 20:33

Ух, работает!!!
Спасибо большое, при 0,15 сек. вариант очень даже приемлемый!!!
Хитро, можно коментарии оставить, а то я немного запутался. Понять все таки хочется.

Андрей Параничев 18.08.2008 23:12

Levin,
// Обворачиваем функцию в локальное замыкание:
function(element) {
    // Возвращаем функцию, которая использует element
    // доступный в локальной области видимости:
    return function() {
        element.className=element.className.replace(/ iehover\b/, "");
    }
// Запускаем эту функцию с параметром this - текущий элемент
// теперь в setTimeout передана функция, которая вернулась
// по return
}(this);

Kolyaj 18.08.2008 23:16

Андрей Параничев, перемудрили что-то
lis[i].onmouseout = function() {
  var self = this;
  setTimeout(function() {
    self.className = self.className.replace(/ iehover\b/, "");
  }, 3000);
}

Андрей Параничев 19.08.2008 00:14

Kolyaj,
Не подумал, виноват :)


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