Opera фокус на объекте 2 раза повторяет :(

VIRUS

Новичок
Opera фокус на объекте 2 раза повторяет :(

В общем написал я на JS небольшую функцию, которая сканирует в документе все <input и работает она по такому алгоритму:

1. Когда DOM готов запускаеться функция, которая:
2. Проходит по очереди все формы.
3. Проходит каждый элемент текущей формы.
4. Если этот элемент имеет тип: text, password, textarea, то:
5. Запоминает имя его класса (CSS).
6. Если фокус на этом элементе, то меняет класс (CSS) этому элементу.
7. Если фокус пропадает с элемента, то возвращает ему запомненый класс.

Пример работы тут (это не реклама, там все четко видно).
Во всех браузерах работет как часики, а в Opera видно что повторяет лишних два раза, сейчас включен дебаг и видно.
Может кто-то сталкивался с подобным, есть какой-то хак для оперы, что бы решить проблему ?
 

ksnk

прохожий
5. Запоминает имя его класса (CSS).
Имя класса не храниться в CSS

Зачем нужен motools, если не пользоваться его итераторами и продолжать использовать innerHTML?

Опера честно предупреждает, что проходит по этакому циклу и видит каждый инпут аж 4 раза. 4 раза вызывается фосус :)

-~{}~ 08.11.08 12:54:

Вместо for(i in xxx) для такого лучше использовать обычный цикл... Именно здесь собака и порылась.
 

VIRUS

Новичок
Автор оригинала: ksnk
Вместо for(i in xxx) для такого лучше использовать обычный цикл... Именно здесь собака и порылась.
Я пробовал mootools-овский each он ругаеться на
document.forms.each(function(item, index) {
});
хотя должен отрабатывать, что тогда использовать для итерации, если я не знаю сколько форм на странице и елементов в форме и вообще есть ли формы?
У меня этот джаваскрипт будет на каждой странице запускаться.
 

VIRUS

Новичок
Супер, теперь заработало как дети в школу.
Только одно меня смущает, вот это как то некрасиво смотрится:
$$(form.elements).each(function(el) {
var t = el.type;
if (t == 'text' || t == 'password' || t == 'textarea') {
var classname_last;
el.addEvent('focus', function() {
classname_last = this.className;
this.className = '_' + this.className;
});
el.addEvent('blur', function() {
this.className = classname_last;
});
}
});

можно его заметить чтото вроде на как в php ?
if (!in_array(r, $types))
?
 

VIRUS

Новичок
Автор оригинала: ksnk
$$(document.forms).each
Рано я начал радоваться, изменил все на each, и IE7 видит только первый элемент формы и все :(

-~{}~ 08.11.08 22:55:

В общем целый вечер помудохался и сделал ляличку. ДЕМО
 
Сверху