Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать видимость от 2х переменных (от 1й - знаю) (https://javascript.ru/forum/misc/59384-kak-sdelat-vidimost-ot-2kh-peremennykh-ot-1jj-znayu.html)

Пенсионер 08.11.2015 23:28

Как сделать видимость от 2х переменных (от 1й - знаю)
 
Известна видимость от 1й переменной.
Цветом выделен скрипт CLOP - закрыть/открыть пункт/подробность
В <body>...</body> одна из множества таблиц, видимостью которой управляет переменная _00, через "одноимённый" img - img_00
Под подробным текстом - img[-] сворачивание пункта (требуется в конце огромного текста, т.к. управляющий img[+] уже вне экрана)
-------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Название</title>
*!*
<style type="text/css">
 .sub{ visibility: hidden;
       display: none; }
</style>
<script language=javascript>
function CLOP(subName) {                           // закрыть/открыть подробность subName
if (eval(subName).style.visibility == "visible") { // если она видима
    eval(subName).style.visibility = "hidden";     // закрыть
    eval(subName).style.display = "none"           // сжать опустевшее место
    eval("img"+subName).src="closed.gif" }         // поменять картинку
else {     
    eval(subName).style.visibility = "visible";    // открыть
    eval(subName).style.display = "list-item"      // раздвинуть текст
    eval("img"+subName).src="opened.gif" }}        // поменять картинку
</script>
*/!*
</head>


<body>
№ текста.(<img src ="closed.gif" id="img_00" onclick ="CLOP('_00')">
Краткий текст.
<table border="1" width="100%" class ="sub" id="_00">
	<tr>
	     <td>Подробный текст.
             <br><img src ="opened.gif" onclick ="CLOP('_00')">
         </td>
	</tr>
</table>
</body>

</html>
-------------------------
Требуется управлять видимостью от 2х видов переменных (скажем, от _00 и s_00 = № пункта, № уровня вложенности),
а лучше от двумерного массива s[№ пункта, № уровня вложенности]
-------------------------
Стандартно дерево управляется/выглядит
Оглавление - много пунктов:
1.[+]
2.[+]
3.[+]
...
Каждый пункт раскрывается/закрывается (например, 1й):
1. [-]
  1.1 [+]
  1.2 [+]
  1.3 [+]
2.[+]
3.[+]
...
А те соответственно, дальше (например, 1й и 1.2й)
1. [-]
  1.1 [+]
  1.2 [-]
     1.2.1 [+]
     1.2.2 [+]
     1.2.3 [+]  
  1.3 [+]
2.[+]
3.[+]
...
Это стандартное управление и оно прекрасно работает.
-------------------------
Требуется добавив переменную № уровня,
одним кликом открывать/закрывать все пункты верхних уровней вложений/оглавлений

Например, Вид ДО нажатия на второй уровень:
1й уровень оглавления.[-]
2й уровень оглавления.[+]
3й уровень оглавления.[+]

1.[+]
2.[+]
3.[+]
...
Вид ПОСЛЕ нажатия на второй уровень:
1й уровень оглавления.[-]
2й уровень оглавления.[-]
3й уровень оглавления.[+]

1. [-]
  1.1 [+]
  1.2 [+]
  1.3 [+]
2.[-]
  2.1 [+]
  2.2 [+]
  2.3 [+]
3.[-]
  3.1 [+]
  3.2 [+]
  3.3 [+]
...

рони 08.11.2015 23:35

Пенсионер,
http://javascript.ru/forum/project/3...na-jquery.html

Пенсионер 09.11.2015 00:06

Спасибо, но это не то. (т.к. последующие клики закрывают предыдущие).

Можно ли заменить имена переменных элементами двумерного массива?
Чтобы элементы менялись от клика:
- 1й на пункт (как сейчас имена),
- 2й на уровень вложенности.
А видимость определялась их сочетанием (1 || 2)

рони 09.11.2015 00:17

Пенсионер,
учебник хороший ссылка вверху ... код размещаемый лучше форматировать
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

и наверно надо как- то без
Цитата:

Сообщение от Пенсионер
eval

и
Цитата:

Сообщение от Пенсионер
windows-1251

но дело ваше ... а в целом непонял что вы хотите сделать.

Пенсионер 09.11.2015 01:23

Очень признателен Вам за помощь.

Увы, пока не могу
- задействовать 2ю переменную для управления видимостью.
- отказаться от eval, т.к. они работают, а чем их заменить я не знаю.

Подправил 1й пост = сделал яснее свой вопрос.
Нашёл учебник https://learn.javascript.ru/first-steps

рони 09.11.2015 01:49

Пенсионер,
смутно вас понимаю ...
<!DOCTYPE HTML>
<html>

<head>
    <meta charset="utf-8">
    <title>Название</title>
    <style type="text/css">
        .sub {
            visibility: hidden;
            display: none;
        }
    </style>
    <script>
        function CLOP(subName) {
            var el = document.getElementById(subName),
                img = document.getElementById("img" + subName);
            if (el.style.visibility != "visible") {
                el.style.visibility = "visible";
                el.style.display = "list-item"
                img.src = "opened.gif"
            } else {
                el.style.visibility = "hidden";
                el.style.display = "none"
                img.src = "closed.gif"
            }
        }

        function CLO(subName) {
            var el = document.getElementById(subName),
                img = document.getElementById("img" + subName);

            if (el.style.visibility != "hidden") {
                el.style.visibility = "hidden";
                el.style.display = "none"
                img.src = "closed.gif"
            }
        }
    </script>
</head>

<body>

    Текст1.(<img src="closed.gif" id="imgsub00" onclick="CLOP('sub00')"> Текст2.
    <table border="1" width="100%" class="sub" id="sub00">
        <tr>
            <td>Текст3.
                <br>
                <img src="opened.gif" onclick="CLO('sub00')">
            </td>
        </tr>
    </table>
</body>

</html>

Rise 09.11.2015 02:01

Пенсионер, javascript-дерево

Пенсионер 09.11.2015 11:15

Большое спасибо за помощь.

1. Уточнил свой вопрос в 1м посте (удалил лишнее)
2. Изучаю Вашу ссылку. Материалов там много и они интересны. Правда, кажется не по моей проблеме. И немножко трудно (далеко ушло вперёд программирование от моей молодости)
3. Да, Ваш вариант кода тоже работает. Интересно, он: быстрее, или экономичнее, или понятнее/читабельнее, или eval - анахронизм?

рони 09.11.2015 11:53

Цитата:

Сообщение от Пенсионер
3. Да,

:yes: всё что вы перечислили

pnpquest 09.11.2015 16:00

Цитата:

Сообщение от Пенсионер
или eval - анахронизм

Нет. Он есть во всех спеках, включая es7.


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