JavaScript+HTML: Код работает нестабильно! :(
От: UJey Украина  
Дата: 06.01.04 12:44
Оценка:
Добрый день!

Прошу помощи, поскольку сам ума не приложу из-за чего один и тот же код работает нестабильно.

Описываю ситуацию:
Делаю страничку для хэлпа. При нажатии на ссылку должен появляться слой в виде хинта (подсказки) с описанием ссылки-параметра.

Вот код слоя:
<div id="HintObject" class="HintStyle" style="display:none; position:absolute; left:275px; top:168px; z-index:1"></div>


Вот код ссылки:
TCntDbTableHandle <a id="idTableHandle" href="javascript:ShowHint('idTableHandle', 'hTableHandle')">TableHandle</a>


Вот код функции ShowHint:
function ShowHint(Parameter_ID, HintString_ID)
{
    // Define HintObject position
    ParamObject = document.all[Parameter_ID];
    
    S_OffsetLeft = 0;
    S_OffsetTop = 0;
    Obj = ParamObject;
    while (Obj != null)
    {
          S_OffsetLeft += Obj.offsetLeft;
          S_OffsetTop += Obj.offsetTop;
      Obj = Obj.offsetParent;        
    }
    
    document.all.HintObject.style.left = ParamObject.offsetWidth + S_OffsetLeft + 10;
    document.all.HintObject.style.top  = S_OffsetTop;
    
    // Define HintObject content
    DT_Object = document.all[HintString_ID + 'DT'];
    DD_Object = document.all[HintString_ID + 'DD'];    
    document.all.HintObject.innerHTML = '<DL>' + DT_Object.outerHTML + DD_Object.outerHTML + '</DL>';

    // Make HintObject visible
    document.all.HintObject.style.display="";
}


Еще инфа: данные для этого слоя берутся из HTML-странички:
<dl>
  <dt id="hTableHandleDT"><em>TableHandle</em></dt>
  <dd id="hTableHandleDD">
    [in] Table handle, returned by <a href="#CntDb_CreateTable">CntDb_CreateTable</a>
         or <a href="#CntDb_OpenTable">CntDb_OpenTable</a> functions.
  </dd>

  <dt id="hColumnDT"><em>Column</em></dt>
  <dd id="hColumnDD">
    [in] Pointer to a structure containing all column data to be added into the table.
  </dd>
</dl>


Проблема: первый раз все работает отлично. Зато вот если нажать на эту ссылку второй раз, то появляется окошко-подсказка с надписью "undefined undefined". Вот не могу понять почему... и как сделать, чтобы работало?

Очень прошу помощи.

Спасибо, буду очень ждать.
Евгений.
Re: JavaScript+HTML: Код работает нестабильно! :(
От: andik  
Дата: 06.01.04 13:12
Оценка: 3 (1)
Здравствуйте, UJey, Вы писали:

В общем то вся проблема из-за того, что у тебя после клика появляются еще элементы с id = hTableHandleDT и hTableHandleDD
при следующем обращении их уже 2

самы простой и быстрый способ выделен ниже жирным

UJ>Добрый день!


UJ>Прошу помощи, поскольку сам ума не приложу из-за чего один и тот же код работает нестабильно.


UJ>Описываю ситуацию:

UJ>Делаю страничку для хэлпа. При нажатии на ссылку должен появляться слой в виде хинта (подсказки) с описанием ссылки-параметра.

UJ>Вот код слоя:

UJ>
UJ><div id="HintObject" class="HintStyle" style="display:none; position:absolute; left:275px; top:168px; z-index:1"></div>
UJ>


UJ>Вот код ссылки:

UJ>
UJ>TCntDbTableHandle <a id="idTableHandle" href="javascript:ShowHint('idTableHandle', 'hTableHandle')">TableHandle</a>
UJ>


UJ>Вот код функции ShowHint:

UJ>
UJ>function ShowHint(Parameter_ID, HintString_ID)
UJ>{
UJ>    // Define HintObject position
UJ>    ParamObject = document.all[Parameter_ID];
    
UJ>    S_OffsetLeft = 0;
UJ>    S_OffsetTop = 0;
UJ>    Obj = ParamObject;
UJ>    while (Obj != null)
UJ>    {
UJ>          S_OffsetLeft += Obj.offsetLeft;
UJ>          S_OffsetTop += Obj.offsetTop;
UJ>      Obj = Obj.offsetParent;        
UJ>    }
             
UJ>    document.all.HintObject.style.left = ParamObject.offsetWidth + S_OffsetLeft + 10;
UJ>    document.all.HintObject.style.top  = S_OffsetTop;

        document.all.HintObject.innerHTML = '';
UJ>    // Define HintObject content
UJ>    DT_Object = document.all[HintString_ID + 'DT'];
UJ>    DD_Object = document.all[HintString_ID + 'DD'];    
UJ>    document.all.HintObject.innerHTML = '<DL>' + DT_Object.outerHTML + DD_Object.outerHTML + '</DL>';

UJ>    // Make HintObject visible
UJ>    document.all.HintObject.style.display="";
UJ>}
UJ>


UJ>Еще инфа: данные для этого слоя берутся из HTML-странички:

UJ>
<dl>
UJ>  <dt id="hTableHandleDT"><em>TableHandle</em></dt>
UJ>  <dd id="hTableHandleDD">
UJ>    [in] Table handle, returned by <a href="#CntDb_CreateTable">CntDb_CreateTable</a>
UJ>         or <a href="#CntDb_OpenTable">CntDb_OpenTable</a> functions.
  </dd>

UJ>  <dt id="hColumnDT"><em>Column</em></dt>
UJ>  <dd id="hColumnDD">
UJ>    [in] Pointer to a structure containing all column data to be added into the table.
  </dd>
</dl>
UJ>


UJ>Проблема: первый раз все работает отлично. Зато вот если нажать на эту ссылку второй раз, то появляется окошко-подсказка с надписью "undefined undefined". Вот не могу понять почему... и как сделать, чтобы работало?


UJ>Очень прошу помощи.


UJ>Спасибо, буду очень ждать.

UJ>Евгений.
... << RSDN@Home 1.0 beta 7a >>
Re[2]: JavaScript+HTML: Код работает нестабильно! :(
От: UJey Украина  
Дата: 06.01.04 14:07
Оценка:
Здравствуйте, andik, Вы писали:

A>В общем то вся проблема из-за того, что у тебя после клика появляются еще элементы с id = hTableHandleDT и hTableHandleDD

A>при следующем обращении их уже 2

A>самы простой и быстрый способ выделен ниже жирным


A>  document.all.HintObject.innerHTML = '';


Слушай, вах, спасибо, дорогой! Век не забуду!
Ставлю тебе за это оценку! — Очень помог и вовремя!
Еще раз спасибо.
Re: JavaScript+HTML: Код работает нестабильно! :(
От: pjBrain  
Дата: 06.01.04 14:13
Оценка:
Попробуй написать

UJ> document.all.HintObject.style.left = ParamObject.offsetWidth + S_OffsetLeft + 10;

UJ> document.all.HintObject.style.top = S_OffsetTop;

так

document.all.HintObject.style.left = (ParamObject.offsetWidth + S_OffsetLeft + 10) + 'px';
document.all.HintObject.style.top = S_OffsetTop + 'px';
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.