Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   событие должно возникать при определенных условиях (https://javascript.ru/forum/events/2826-sobytie-dolzhno-voznikat-pri-opredelennykh-usloviyakh.html)

kotkerk 15.02.2009 02:24

событие должно возникать при определенных условиях
 
приветствую всех
===
пытаюсь подрихтовать один скрипт (скрипт не мой, стащил с другого форума), но т.к. в JS не силен (в основном PHP), поэтому слабо получается
что у нас есть
ф-я fetch_object(obj) - описана в файле vbulletin_global.js
ф-я fetch_tags(parentObj, tag) - описана в файле vbulletin_global.js
ф-я get_e(e):
function get_e(e)
{
     return (e) ? e : (window.event) ? event : null;
}

ф-я who_fired_event(e):
function who_fired_event(e)
{
      e = get_e(e);
      if(!e) 
      {
           return;
      }
      var targ = (e.target) ? e.target : (e.srcElement ? e.srcElement : null);
      if(targ && targ.nodeType == 3)
      { 
           targ = targ.parentNode;
      }
      return targ;
}

есть объект (это тело сообщения любого поста темы)
var Obj = fetch_object('post_message_' + postid);


есть таржет
var postObj = who_fired_event(evt);


<div id="post_message_$post[postid]">
	$ad_location[ad_showthread_firstpost_start]
	$post[message]
</div>

что нужно
что бы событие onclick срабатывало только внутри этого "дива" и во всех его потомках и нигде больше
так собсно в чем вопрос, как правильно создать условие, что бы было именно так, а не иначе
что пробовал
3 дня мучил гугля в поисках готового решения
пробовал сам запихать в цикл for() объект и пройтись по всем его чилдам заключая в условие только типы (nodeType) 1 и 3
событие срабатывает, но только если это текст поста, если в посте есть так же и включенные теги, например бб-коды полужирный текст или наклонный или любой другой, событие не срабатывает
дебаг делал при помощи ф-ии
function echo(obj, str)
{
     var obj = fetch_object(obj);
     obj.innerHTML += str;
}

подключая как объект прописанный в шаблоне (postbit_legacy) пустой див
<div id="p_$post[postid]"></div>

вызывается так
var p = fetch_object('p_' + postid);
echo(p.id, string);

без всех этих телодвижений скрипт работает нормально, пример на моем форуме (ссылка в профиле) выделить текст в посте, появится окошко "цитировать", кликнув на которое, выделенный текст вставляется в форму быстрого ответа с ником пользователя этого поста и ID этого поста
примерно так
[quote=nickname;123456]выделенный текст[/quote]

этот скрипт, доработка (+микс с другим) того, что установлен на этом форуме
скрипт работает естессно только когда заходишь, как пользователь, гостям недоступно
===
если кто не зареган там или лениво, то вот картинка, как это выглядит


Zibba 15.02.2009 02:47

Это не поможет!? Или я что то не так понял!? :(

kotkerk 15.02.2009 02:55

я читал подробное описание этого, но только на английском =)
здесь
сейчас подробно изучу на великом и могучем, спасибо, что откликнулись =)

kotkerk 15.02.2009 05:29

ок, с этим разобрался другим путем, просто добавив в сам шаблон к ID этого дива
onmouseover="if(typeof obj == 'object'){obj.valid = true;}" onmouseout="if(typeof obj == 'object'){obj.valid = false;}"

с проверкой в скрипте на true/false
коряво, да, знаю, но работает именно так мне нужно во всех браузерах, которые у меня на компе для этих целей (опера, лис, сафари, хром, ИЕ6) =)
может кто подскажет более изящное решение?...
===
ладно, одной проблемой меньше, теперь другое с этим же скриптом, тут я совсем "плаваю" =)
если на странице есть объекты Drag&Drop, то после того, как хотябы коснулся мышкой этого объекта, скрипт перестает работать, Firebug не пишет никаких ошибок, просто ни-че-го... поэтому не могу понять, где ошибка и ошибка ли это?
после F5 все опять нормально работает
скрипт (Drag&Drop) использую с сайта http://www.dynamicdrive.com dom-drag.js
самый маленький, который смог найти в инете (3,84Кб), все остальное - громоздкие фреймворки, которые не очень хочется использовать для столь малой необходимости - перетащить объект по странице


Часовой пояс GMT +3, время: 02:14.