Java Script surprises
Jan. 17th, 2005 05:36 pmС глубокой ностальгией вспоминаю времена программирования под MFC. Много было всякого нетривиального, но в JavaScript/DHTML - всё намного чудесатее... Из совсем свежего:
Демонические combo-boxes
Расклад такой: в таблице на ячейки навешаны обработчики кликов, динамически создающие контролы. Делается это примерно так:
var html =
'<select name="foo" class="ctrl" ' +
'onKeyPress="return check_keypress()" ' +
'onBlur="return do_accept()" ' +
'onChange="return check_change()">' +
'<option value="" /></select>';
e.innerHTML += html;
И вроде всё работает. Пока не выясняется что в какой-то версии IE5.5 всё это роняет IEXPLORE.EXE. Но только при потере фокуса открытым комбо-боксом. Пришлось отказаться от onBlur.
Туда-сюда...
Профессор физики читает лекцию, в аудитории три студента. Вдруг пятеро встают и выходят. Профессор про себя думает:
- Hу вот, еще парочка придет - вообще никого не останется.
Задачка та же. Таблица, обработчики на ячейках. При наведении мыши надо хитро подсветить ячейку, при уходе - сбросить подсветку. Код естественно получается такой:
<td id="123456789"
onMouseEnter="return hookMouseEnter()"
onClick="return hookClick()"
onMouseLeave="return hookMouseLeave()">[some content]</td>
И тут выясняется, что не всегда на каждый Enter приходится свой Leave. Дрожащими руками запросто можно сделать три-четыре Enter'a. Почему такое получается - пока не могу понять, как бороться - тоже. Написать считающий семафор с ходу не вышло. В смысле написать вышло, только он не работает...
