Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > объеденить две функции в одну


Автор: Alx 1.11.2004, 15:09
в последнее время я очень беспокоюсь за свои умственные способности! голова совсем не варит, ни на чём не могу сосредоточится! вот пишу скрипт:

Код

<script>
var all = ["x3m",];
all[1] = ["Пункт 1","дтл","имж"];
all[1][1] = ["Пункт 1_1"];
all[1][2] = ["Пункт 1_2"];
all[1][3] = ["Пункт 1_3"];
all[1][3][1] = ["Пункт 1_3_1"];
all[1][3][2] = ["Пункт 1_3_2"];

all[2] = ["Пункт 2"];

all[3] = ["Пункт 3"];
all[3][1] = ["Пункт 3_1"];
all[3][2] = ["Пункт 3_2"];
all[3][2][1] = ["Пункт 3_2_1"];
all[3][2][2] = ["Пункт 3_2_2"];
all[3][2][3] = ["Пункт 3_2_3"];
all[3][2][3][1] = ["Пункт 3_2_3_1"];
all[3][2][3][2] = ["Пункт 3_2_3_2"];
all[3][2][4] = ["Пункт 3_2_4"];
all[3][3] = ["Пункт 3_3"];

writeMain()

function writeMain()
{for (var i=1; i<all.length; i++)
{document.write(all[i][0] + "<br>");
if (all[i].length > 1)
{document.write(writeSub(all[i],1))
}
}
}

function writeSub(theVar,koren)
{var res = "";
var nbsps = "";
for (var k=1; k<=koren; k++)
{nbsps += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
}
for (var j=1; j<theVar.length; j++)
{res += nbsps + "" + theVar[j][0] + "<br>";
if (theVar[j].length > 1)
{res += writeSub(theVar[j],k++);
}
}
return res;
}

</script>


и не могу объеденить 2 функции в одну! Одна пишет самые верхние разделы, вторая все остальные. Может кто напишет?

Автор: Sardar 1.11.2004, 20:56
Обьясни мне вот этод код:
Код

all[1] = ["Пункт 1","дтл","имж"];
all[1][1] = ["Пункт 1_1"];
all[1][2] = ["Пункт 1_2"];


А еще лучше подумай в целом что ты сделал и сделал ли ты меню удобным и понятным. ;-)
Еще подумай кто будет это меню создавать: генерится на сервере, собирается ручками статичное меню. В первом случае генери сразу разметку, в другом придумаем тебе удобный интерфейс. Скинь весь код.

Автор: Alx 2.11.2004, 14:40
Sardar
это я случайно не совсем то выложил -

Код

all[1] = ["Пункт 1"];
all[1][1] = ["Пункт 1_1"];
all[1][2] = ["Пункт 1_2"];


а вообше, я ж пока меню даже не начинал делать! просто в отдельный файл создал, чтобы написать именно эту функцию... правда сейчас столкнулся с одной проблемой... я насамом деле уже написал всё это дело по-другому:

скрипт на странице index.html:
Код

var time = 70;

writeMenu("begin","1");
writeMenu("main","1","Дизайн","#","x3m_img/lnk1op.gif");
writeMenu("begin","1_sub");
writeMenu("sub","1_1","Уникальные разработки","#","x3m_img/page.gif");
writeMenu("sub","1_2","Шаблоны","#","x3m_img/page.gif");
writeMenu("end","1_sub");
writeMenu("end","1");

writeMenu("begin","2");
writeMenu("main","2","Разработка сайтов","#","x3m_img/lnk2op.gif");
writeMenu("begin","2_sub");
writeMenu("sub","2_1","HTML","#","x3m_img/page.gif");
writeMenu("sub","2_2","Flash","#","x3m_img/page.gif");
writeMenu("sub","2_3","Сделай сам","#","x3m_img/page.gif");
writeMenu("end","2_sub");
writeMenu("end","1");


часть основного скрипта script.js
Код

function writeMenu(var_what,var_id,var_name,var_href,var_img)
{var res;
switch (var_what)
{case "begin":
res = '<table cellspacing="0" cellpadding="0" border="0"><tr><td>';
break;

case "end":
res = '</td></tr></table>';
break;

case "main":
res = '<table style="height:22;display:block;" cellspacing="0" cellpadding="0" border="0" id="' + var_id + '"><tr>\n';
res += '<td style="width:0;"></td>\n';
res += '<td style="background: url(\'x3m_img/sub1.gif\');text-align:center;vertical-align:middle;width:20;">';
res += '<img src="x3m_img/minus.gif" onmouseover="setCur(this)" onclick="mainFunc(this.id,0)" id="lnk' + var_id + '">\n';
res += '</td>\n';
res += '<td srtle="text-align:center;vertical-align:middle;width:20;">\n';
res += '<img style="height:18;width:18;" src="' + var_img + '" onmouseover="setCur(this)" onclick="mainFunc(this.id,0)" id="lnk' + var_id + '">\n';
res += '</td>\n';
res += '<td style="text-align:left;vertical-align:top;">\n';
res += '<a class="mainLnk" href="' + var_href + '">' + var_name + '</a>\n';
res += '</td></tr></table>\n';
break;

case "sub":
res = '<table style="height:22;display:block;" cellspacing="0" cellpadding="0" border="0" id="' + var_id + '"><tr>\n';
res += '<td style="background: url(\'x3m_img/line.gif\');width:18;"></td>\n';
res += '<td style="background: url(\'x3m_img/sub1.gif\');width:18;"></td>\n';
res += '<td style="text-align:center;vertical-align:middle;width:20;">\n';
res += '<img style="height:18;width:18;" src="' + var_img + '">\n';
res += '</td>\n';
res += '<td style="text-align:left;vertical-align:top;">\n';
res += '<a href="' + var_href + '" class="subLnk">' + var_name + '</a>\n';
res += '</td>\n';
res += '</tr></table>\n';
break;
}
document.write(res);
}


здесь всё работает замечательно, толбко вот одна проблема: не решил ещё, как определять, является ли пункт последним (это нужно для обозначения линий, т.е. дальше она не пойдёт). Новым способ это можно было бы решить, проверяя не является ли данный элемент массива последним, а тут пришлось бы извращаться. Есть ещё несколько проблем, серьёзных и не очень с обоими вариантами, но склоняюсь к первому, хотя мне кажется, удобнее создавать меню по второму. Через PHP не хочу делать, хочу, чтобы на локалке тоже работало. никому не нужен скрипт, для которого нужен ещё и веб-сервер. допустим челу нужно меню. он ищет его, скачивает моё, моё работает тольк с PHP. а у него нет ни Апаче, и хостинг у него вообще - Narod. Поэтому пишем через JS вышесказанной функцией.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)