Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: cloneNode
 
 автор: dimon.st   (24.07.2006 в 18:44)   письмо автору
 
 

Здравствуйте столкнулся вот с какой проблеммой:
<B id=qqq onmousedown="alert('down')">qqq</B><br>
<SCRIPT LANGUAGE="JavaScript">
<!--
qqq.onmouseup=function () {alert('up');}
alert(qqq.onmouseup)
alert(qqq.onmousedown)
www=qqq.cloneNode(1);
alert(www.onmouseup)
alert(www.onmousedown)
document.body.appendChild(www)
//-->
</SCRIPT>
Все браузеры кричат что в клонированном ноде нету onmouseup - меня это очень смущает и еще больше раздражает, требуеться цивилизованный вариант исправлений, зарание спасибо.

   
 
 автор: 12345   (24.07.2006 в 23:03)   письмо автору
 
   для: dimon.st   (24.07.2006 в 18:44)
 

Обратитесь с вопросом на http://forum.vingrad.ru/ , rsdn.ru или http://xpoint.ru/forums/programming/javascript/misc/forum.xhtml - нужны более искушённые специалисты. Могу посоветовать innerHTML, но это не метод.

И
<B id=qqq onmousedown="alert('down')">qqq</B><br>
<script>
qqq.setAttribute("onmouseup1",Function("alert('up');"));
alert(qqq.onmouseup1)
alert(qqq.onmousedown)
www=qqq.cloneNode(1);
alert(www.getAttribute('onmouseup1'))
alert(www.onmousedown)
document.body.appendChild(www)
</script>
работает.

   
 
 автор: Dimon.st   (25.07.2006 в 23:55)   письмо автору
 
   для: 12345   (24.07.2006 в 23:03)
 

решил не обращаться за помощью на др форума, а подумать своей головой:

<B id=qqq onmousedown="alert(-1)">q<I onmousedown="alert(999)">q</I>q</B><BR>


add_handler=function (obj, ev, func)
{
if (!obj.handler_stack) {obj.handler_stack={};}
if (!obj.handler_stack[ev]) {
  obj.handler_stack[ev]=[];
  if (obj[ev]) {obj.handler_stack[ev][0]=obj[ev];}
  obj[ev]=function (e) {var ret; for (var i=0; i<obj.handler_stack[ev].length; i++) {ret=obj.handler_stack[ev][i](e);} return ret;}
  }
obj.handler_stack[ev][obj.handler_stack[ev].length]=func;
}

restart_handler=function (obj,from)
{
obj.handler_stack={};
for(var ev in from.handler_stack) {
obj.handler_stack[ev]=[]; for (var i=0; i<from.handler_stack[ev].length; i++) {obj.handler_stack[ev][i]=from.handler_stack[ev][i];}
obj[ev]=(function (ev) {return function (e) {var ret; for (var i=0; i<obj.handler_stack[ev].length; i++) {ret=obj.handler_stack[ev][i](e);} return ret;}})(ev);
}

for(var n in obj.childNodes) {if (obj.childNodes[n].nodeType==1) {restart_handler(obj.childNodes[n],from.childNodes[n]);}}
}

remove_handler=function (obj, ev, func)
{
if (obj.handler_stack)
if (obj.handler_stack[ev]) {
  for (var i=0; i<obj.handler_stack[ev].length; i++) {if (obj.handler_stack[ev][i]==func) {obj.handler_stack[ev].splice(i, 1); return;}}
  }
}


Здесь мы имеем назначение событий add_handler удаление событий remove_handler и обновление событий (после клонирования например) restart_handler
Пример использования:
fff=function () {alert(1)} // объявление функции
sys.add_handler(qqq,'onmousedown',function () {alert(0)}); //добавление события на нажатие
sys.add_handler(qqq,'onmousedown',fff); // добавление ране объявленной функции на нажатие
sys.add_handler(qqq,'onmousemove',function () {status+=1}); // добавление на движение (status только в осле)
www=qqq.cloneNode(1); //клонирование нода
www.id='www' // переназначение индификатора (для возможности обращение к qqq)
sys.restart_handler(www,qqq); //обновление событий точнее перезадача относительно клонируемого объекта
document.body.appendChild(www)
sys.remove_handler(www,'onmousedown',fff); //удаление одной из функций у клонированного объекта на нажатие
Плюсы:
1. возможность назначения нескольких обработчиков событий с последующим их удалением
2. возможность восстановить события у клонированного нода
Минусы:
1. навязывание использования remove_handler/add_handler, некрасивость метода
2. рекурсия при восстановлении

Буду рад если кому-нибудь понадобиться, также с удовольствием выслушую идеи доработки ..

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования