Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> клик снаружи дива, как бы вы сделали? 
V
    Опции темы
12345c
Дата 19.10.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



katka, нет, почтой - на другие темы общайтесь, а про Javascript - здесь smile
PM WWW   Вверх
AKS
Дата 19.10.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Nicholas_S, 
Цитата

Если возникнет необходимость...

Не-е-е, я повозился и бросил (ну их, эти эмуляции)! Там кстати с параметром false имеется ввиду, что элемент не будет перехватывать события детишек, и это, как раз о-о-очень не легко, а может даже не возможно!
Я сделал по-простому - четыре функции и полностью решается проблема автора темы (все кроссбраузерно и места занимает столько, сколько сама эмуляция - чего еще желать?):

PM MAIL   Вверх
Nicholas_S
Дата 19.10.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 19



Подобные эмуляции стоит писать тогда, когда, скажем, они входят в какой-нибудь framework, библиотеку для пользователей, которым нужен идентичный набор методов и свойств для всех браузеров. Но это отнюдь не панацея - если можно реализовать все проще, то почему бы и нет. Я просто предложил один из вариантов.
А дописать данный код для "детишек", AKS, в пару строк не получится, я с тобой согласен.


--------------------
...все в мире относительно
PM   Вверх
Burrr
Дата 20.10.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



Господа!
Цель должна оправдывать средства. Не знаю насколько сложное приложение пишет katka, но есть предположение, что кода, который написал Avb на первой странице более чем достаточно. Я к нему только бы добавил проверку, чтобы ф-ия closeDiv вызывалась только тогда, когда этот див виден, и всё!
stopPropargation & cancelBubble будет вполне достаточно.
Возможно тяжеловесная ф-ия скрытия будет запускаться только в случае надобности. Проблема решена, и незачем писать лишние километры кода!


--------------------
PM MAIL ICQ   Вверх
AKS
Дата 20.10.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Burrr, 
Цитата

Я к нему только бы добавил проверку, чтобы ф-ия closeDiv вызывалась только тогда...

А я бы добавил возможность использовать методы addEventListener/attachEvent...
PM MAIL   Вверх
Burrr
Дата 20.10.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



AKS
Цитата

А я бы добавил возможность использовать методы addEventListener/attachEvent...

Зачем, что это даст в данном конкретном случае? На какой элеиент ты собираешься вешать событие этими методами?


--------------------
PM MAIL ICQ   Вверх
katka
Дата 20.10.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 19.7.2004

Репутация: нет
Всего: 6



Nicholas_S, велели тут разговаривать )) так что такое HTMLElement?
--------------------
если с другом буду я, если с другом буду я, а медведь — без друга
PM MAIL WWW ICQ   Вверх
AKS
Дата 20.10.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Burrr, Вы знаете, на мой взгляд удобней использовать методы addEventListener/attachEvent вместо такого:
Код

document.onclick = function() {
     firstFunc();
     secondFunc();
     //...
}

"Почему?" - спросите Вы. Потому, что я напишу, затем кто-то допишет, а потом кто-то еще что-то добавит (это те, кто будет заниматься поддержкой странички в дальнейшем), и никому не придется лезть в чужой код, искать document.onclick, чтобы туда вставить что-то свое. Такая вот своеобразная и всеми любимая независимость получается...
Я вчера кое-что писал - сейчас оформлю для наглядности и покажу...
PM MAIL   Вверх
Nicholas_S
Дата 20.10.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 19



katka, если научным языком, то HTMLElement это производный класс от Element, т.е. класс-предок. Ими являются элементы страницы как то: DIV, A, TABLE и проч. Но такое определение элементов страницы отсутствует в IE, поэтому строка if (window.HTMLElement), как ты уже заметила, "определяет" тип браузера, т.е. код ветки будет выполнен, например, для FF/Opera, но не для IE.

var element = HTMLElement.prototype:
Механизм прототипов (prototypes) в JS позволяет определять новые методы/свойства для объектов, другими словами, используя поле "prototype" можно добавить несуществующий метод, например, для всех строковых переменных: 

String.prototype.calcSpaces = function () {[здесь подсчитываем количество пробелов строки]}

Далее для любой переменной строкового типы можно вызвать этот метод: var spacesCnt = myString.calcSpaces();
------------
var capture = ["click", "mousedown", "mouseup", "mousemove", "mouseover", "mouseout"];
Это просто массив со списком имен событий, для которых мы определяли перехват.
В принципе, в нашем случае нужен был только клик, поэтому можно было просто задавать далее строку "click".

element.setCapture = function() {...}

Это ^ как раз определение нового метода setCapture() для всех HTML-элементов страницы, или, если записать по-другому:

HTMLElement.prototype.setCapture = function() {...}

this._capture = function(e) {...}

Здесь ^ создается обработчик событий, т.е. данная функция будет вызываться каждый раз, когда происходит како-либо событие на каком-либо HTML элементе. Параметр "e" - объект самого события (event).

var event = document.createEvent("MouseEvents");
with (e) event.initMouseEvent(type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY,
                                                ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);

Создаем ^ новый объект события на основе перехватываемого (e).

self.dispatchEvent(event);

^ Генерируем созданное событие на HTML элементе (в IE есть еще подобный метод fireEvent(eventType)).

window.addEventListener(capture[i], this._capture, true);

^ Регистрируем события (которые перечислены в массиве) для HTML-элемента.

И, наконец, element.releaseCapture = function() {...} - дерегистрируем события.

Вот и все.  smile 


--------------------
...все в мире относительно
PM   Вверх
AKS
Дата 20.10.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Burrr, предлагаю маленький архивчик со страничкой и сценарием. Сделал все с использованием методов addEventListener/attachEvent  (даже на страничке разместил цитату из стандарта на тему "как выгодно использование" этих методов ;) )...

Присоединённый файл ( Кол-во скачиваний: 29 )
Присоединённый файл  test.rar 1,75 Kb
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0798 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.