IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   ID="Уникальное_Имя" через JavaScript - Помогите! (https://www.imho.ws/showthread.php?t=67365)

WMRomik 31.08.2004 03:43

ID="Уникальное_Имя" через JavaScript - Помогите!
 
Вложений: 1
Прошу прощения, но снова я вляпался в проблему...
смысл которой илюстрируется в приклееном архивчике и является таковой:
шаблон генерирует мне таблицу с именем паки или файла, а так же ссылку к ней и, помимо того, генерирует скрытый слой с описанием ссылки, если таковое описание было задано.

Проблема как-раз в этом скрытом слое порылась.
Т.е. если у меня на странице более чем одно описание, то для всех ссылок отображается лишь то, которое ближе к верху, происходит это потому, что скрытый слой генерируется с одним и тем же "ID" для всех ссылок с описанием.

Вот у меня возник вопрос, как заставить этот ID быть уникальным, при том, что ещё и вызов функции открывающей слой был адресован именно тому ID к которому относится?

Насколько я пониманию, силами JavaScript это сделать можно, но у меня никак не выходит каменный цветок...

Пожалуйста, помогите!

Ale 31.08.2004 07:46

Почему скрипт, котор генерирует хтмл не может генерить уникальные id?

Если нет доступа к коду скрипта, но можно менять шаблон - вставляй описание вместо id. Т.е. вместо

<div id="t_screen" class="tip" style="left: 515px; top: 298px;">
и
onmousemove="ts(event,'t_screen')" onmouseout="tc('t_screen')"

соотв

<div id="Описание касающееся паки №3" class="tip" style="left: 515px; top: 298px;">
и
onmousemove="ts(event,'Описание касающееся паки №3')" onmouseout="tc()"

WMRomik 31.08.2004 11:22

Ale
Спасибо.
В принципе мне такая мысль в голову приходила, но есть некоторые проблемы с реализацией такого подхода:
1. Длина описания может составлять 255 знаков. Умножаем на три...
2. Само описание может содержать html форматирование и уже не обработается.
3. Выглядит этот метод, как бы сказать правильно, не так, как мог бы...

Я понимаю, что именно в этом направлении нужно двигаться, но не описание целиком подставлять. Нужно что-то короткое и элегантное.

т.е. я как пёсик, всё понимаю, но сказать не могу...

Ale 31.08.2004 16:01

Вложений: 1
Цитата:

1. Длина описания может составлять 255 знаков. Умножаем на три...
На 3 не надо - tc() не использует id

Цитата:

Нужно что-то короткое и элегантное.
FILENAME? Не знаю откуда берутся / как хранятся описания ("Описание касающееся паки №3") и FILENAME ("папка №3)

Цитата:

2. Само описание может содержать html форматирование и уже не обработается.
Тада можно все упростить - хранить в описании весь кусок html-кода к этому описанию/лэеру относящийся (от <tr до </tr>). Это самый простой вариант, но изячности в нем тоже нету :)

Цитата:

3. Выглядит этот метод, как бы сказать правильно, не так, как мог бы...
Можно облагородить: поместить описания в массив и выводить циклом. Счетчик цикла будет unique id. html-код для каждой папки/файла повторяется соотв его можно засунуть в js-переменную, этим сократить объем кода. См. аттач. Я исходил из того, что под FILENAME в шаблоне есть такой-же плэйсхолдер как и под описания

НО все же самым правильным (оно же красивым), имхо, было бы формировать и выводить весь этот код не джава-скриптом а пхп

WMRomik 31.08.2004 20:56

Да уж, про ПХП я знаю, но это совершенно другая история. Это не веб-сайт, это темплэйт генерируемый программой hfs.exe (HTTP File Server).
Используются свои собственные методы генерации.
Вот как это выглядит, в кусочке:
Код:

[files]
<tr>
<th style="text-align:center"><span class="column">I</span>
<th><a href="%folder%?sort=n"><span class="column">FILENAME</span></a>
<th><a href="%folder%?sort=s"><span class="column">FILESIZE</span></a>
<th><a href="%folder%?sort=t"><span class="column">FILEDATE</span></a>
<th style="text-align:center"><span class="column">HITS</span>
</tr>
%list%

[file]
<tr class="mout" onmouseover="this.className='mover'" onmouseout="this.className='mout'" onclick="location.href='%item-url%'">
    <td width="16px">%comment%</td>
    <td><img align="top" src="/~img_file" border="0" alt="">&nbsp;&nbsp;<b>%item-name%</b></td>
    <td>%item-size%</td>
    <td>%item-modified%</td>
    <td>%item-dl-count%</td>
</tr>

[folder]
<tr class="mout" onmouseover="this.className='mover'" onmouseout="this.className='mout'" onclick="location.href='%item-url%'">
<td width="16px">%comment%</td>
<td><img align="top" src="/~img_folder" border="0" alt="">&nbsp;&nbsp;<b>%item-name%</b></td>
<td colspan="3"><b><i>Directory</i></b></td>
</tr>

[link]
<tr class="mout" onmouseover="this.className='mover'" onmouseout="this.className='mout'" onclick="location.href='%item-url%'">
<td width="16px">%comment%</td>
<td><img align="top" src="/~img_link" border="0" alt="">&nbsp;&nbsp;<b>%item-name%</b></td>
<td colspan="3"><b><i>This is a link</i></b></td>

[comment]
<div id="t_screen" class="tip" style="left: 515px; top: 298px;">
<table width="100%"><tr><td><span class="tipline" id="bb"><i>= Comment =</i></span></td></tr>
<tr><td class="tip2"> %item-comment% </td></tr>
</table>
</div>
<img onmousemove="ts(event,'t_screen')" onmouseout="tc('t_screen')" src="/~img10" border="0" alt="">

Сам видишь, конкретно массив как-будто бы и поместить некуда...

Из шаблона [comment] шаблоны [file] [folder] [link] не парсятся. Пробовал переставлять местами - ничего не изменилось... т.е. %item-name% так и прописывается, и ID по прежнему остаётся одним и тем же...

Далее, если вставить массив в <head></head>, то не парсится значение для %comment% и т.д.
Блин, я 100% уверен, что есть решение.
Влезать в исходный код программы мне бы не хотелось. Да и задачи такой нет. В конце-концов у неё есть автор, это его рук дело: &RQ (крыса, в народе).
Да и в Delphi я куда ещё больший чайник.
Спасибо тебе за то, что парился так долго. Может ещё какие мысли придут, в силу вновь открывшихся обстоятельств.
Вообще, можешь её скачать и попробовать, очень милый файловый сервер, кстати.
Тут сама прога: _http://www.rejetto.com/temp/hfs2.0alpha20.zip
Тут мой темплейт: _http://www.audiodom.ru/hfs/HFS_damn_Template_by_brooks.zip
Форум проги: _http://rejetto.gamesnet.it/forum/viewforum.php?f=21&sid=3bd72b520e8173e00564a0aa5f208b2c

Ale 01.09.2004 01:35

Звиняй, нет возможности подробно вникать в hfs. Есть возможность вносить изменения в кусочек котор ты привел? Если да, попробуй так:

Код:

function randomID() {
        id=''
        max_len=8
        while (max_len) {r=Math.round(Math.random()*10); id+=r; max_len--}
        return id
}

Функция генерит уникальный id (8 знаков) из случайных цифр. Ее ессно в head

В блоке [comment] 1ю строку заменить на

Код:

<script>var screenID="scr"+randomID(); document.write("<div id="+screenID+" class=tip style='left: 515px; top: 298px;'>")</script>
последнюю на

Код:

<script>document.write("<img onmousemove=\"ts(event,'"+screenID+"')\" onmouseout='tc()' src='/~img10' alt='' border=0>")</script>
Не идеальный способ, но должен работать. Кстати, у тебя симпатичный темпл получается

Hubbitus 01.09.2004 02:01

Вложений: 1
Предлагаю в данном случае обращаться к описанию не по ID, а ОТНОСИТЕЛЬНО вызова функции показа комментария, я так понял что структура докмента строго задается, тогда это становится вполне возможно.

Я проверял под Моззилой только, и мне лень писать для такого количества браузеров, но идея я думаю ясна. Вот мой пример решения данной задачи, обрати внимание на обращение к комментарию в функции getLayer(layerName), а также на вызов вункции onmousemove="ts(event,this)", вместо onmousemove="ts(event,'t_screen')".

WMRomik 01.09.2004 02:24

Уфф... Ale
Именно это мне и было нужно!
Огроменное спасибо!
Всё прекрасно работает.

А я дурак пытался через скрытые поля формы передать сгенерерованные ID.

Hubbitus
Работает в отрисованной странице, без проблем. Но в реальных условиях почему-то отказ... Жаль. А идея хорошая. Нужно будет подумать над ней. Спасибо!

Hubbitus 01.09.2004 22:24

Цитата:

WMRomik:
Работает в отрисованной странице, без проблем. Но в реальных условиях почему-то отказ... Жаль. А идея хорошая. Нужно будет подумать над ней. Спасибо!
Что значит в реальных условиях отказ? Под разные браузеры я просто не писал, я привел лишь пример реализации в DOM, а вообще идея д.б. какраз универсальной, тоесть ты ссылаешься не на какой-то конкретный слой/элемент, а относительно, например на "ближайший комментарий".

Хотя решать тебе конечно.

WMRomik 01.09.2004 23:23

Hubbitus
Прошу прощения. Я видимо что-то упустил. Теперь вижу - действительно всё работает.
Супер!


Часовой пояс GMT +4, время: 10:28.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.