| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > отключения реакции элемента на события |
| Автор: DigitalBrain 24.4.2010, 20:45 |
| Здравствуйте господа! Попробую задать вопрос на этом форуме( т.к на другом решить проблему не смогли а это выглядит куда солидней гг) есть кнопка созданная с JS с графикой с помощью background-image оформленная как класс. Она является элементом table с 4 мя колонками-левый край кнопки-ячейка с иконкой кнопки(элемент image) , ячейка с span для надписи к кнопке ну и ячейка-правый край кнопки. Ячейки полностью занимают всю площадь table(нет внутренних отступов) а теперь к сути проблемы : Нужно задать реакцию кнопки на событие onmouseover / onmouseout. Казалось бы все просто , но если обработчик поставить на хендл непосредственно элемента table- то при перемещение указателя мышки уже внутри кнопки(таблицы) по разным дочерним ее элементам(например span, image) для них генерируются тоже такие же события - их соответственно получает обработчик onmouseover table , так как событие всплывает вверх по иерархии элементов. Т.е генерируются ложные события для таблицы во время перемещения указателя по ее дочерних элементах - так как указатель уже внутри table и никаких событий не должно ему поступать. Фильтр по event.target нечего не даст если сравнивать ее с хенделом table - так как сам table не выступает за свои ячейки - т.е он всегда под ними. Выхода я не как не найду. Думаю Кто то уже должен был решать ету проблемы. Помогите свежими идеями очень прошу=) |
| Автор: Amphiluke 24.4.2010, 22:27 | ||
Хм. Надеюсь, понял проблему правильно. Вот примерчик.
Получился довольно-таки монстр, но работает. Суть в том, чтобы при возникновении события onmouseover обнулить его обработчик, а при возникновении события onmouseout — восстановить при условии, что курсор вышел за пределы таблицы. Добавлено через 3 минуты и 48 секунд Random-ный цвет таблицы сделал, чтобы убедиться, что при ерзании мышкой по дочерним элементам таблицы не происходит ложных срабатываний обработчика события onmouseover. |
| Автор: DigitalBrain 24.4.2010, 23:03 | ||
| Спасибо огромное! Неожидал такой оперативности в помощи. Действительно помог такой алгоритм) Признаюсь даже не знал про свойство relatedTarget / toElement =) точнее когда то встречал их , но не обращал внимания) а зря... 3 дня мук кончились гг Добавлено через 7 минут и 35 секунд
Да можно, может даже и лучший вариант. Хотя это не помеха так как кнопки-- экземпляр класса и все элементы там созданы с JS -- document.createElement('table'); вегда есть хенл на него , нет необходимости давать каждому свой ID ,а значит и получать по нем хендл ненужно.... |