Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   скрипт не отоброжает данные в диве (https://javascript.ru/forum/events/2184-skript-ne-otobrozhaet-dannye-v-dive.html)

sp3d 15.11.2008 19:28

скрипт не отоброжает данные в диве
 
Здравствуйте!
Дело вот в чем:
При нажатии на кнопку происходит следующие;
Если результат поиска =0, то отоброжается информация,
если же результат имеется, то ничего не отоброжает
функция search работает, а show нет
Только начинаю изучать JavaScript, многое непонятно
Уважаемые форумчане, покажите ошибку в коде.

javascript:
<HEAD>
<SCRIPT LANGUAGE="">
<!-- Begin
var item = new Array();
// "имя файла","путь","Название Страницы","Много,Ключевых,Слов","Описание страницы"
c=0; item[c]=new Array("index.html","","Стартовая страница","index,основная,0,стартовая","Демонстрация поискового механизма для сайта.");
c++; item[c]=new Array("about.htm","","Обо мне","об,автор,контакты,email,кто","Контактная информация с автором страницы.");
c++; item[c]=new Array("links.htm","","Ссылки","ссылки,больше,где,похожее,друзья","Ссылки на сайты.");
c++; item[c]=new Array("main.htm","main/","Основная страница","содержание,основная,фокус","Основная страница сайта.");
c++; item[c]=new Array("logo.jpg","main/images/","Значок","ссылка,рисунок,картинка,графика","Картинка.");

function search(frm) {
txt = frm.srchval.value.split(" ");
fnd = new Array(); total=0;
for (i = 0; i < item.length; i++) {
fnd[i] = 0; order = new Array(0, 4, 2, 3);
for (j = 0; j < order.length; j++)
for (k = 0; k < txt.length; k++)
if (item[i][order[j]].toLowerCase().indexOf(txt[k]) > -1 && txt[k] != "")
fnd[i] += (j+1);
}
for (i = 0; i < fnd.length; i++) {
n = 0; w = -1;
for (j = 0;j < fnd.length; j++)
if (fnd[j] > n) { n = fnd[j]; w = j; };
if (w > -1) total += show(w, win, n);
fnd[w] = 0;
}
document.getElementById('sub').innerHTML="</table><br>Всего найдено: "+total+"<br>";
}
function show(which,wind,num) {
link = item[which][1] + item[which][0];
link = item[which][1] + item[which][0];
line="<tr><td><a href='"+link+"'>"+item[which][2]+"</a> Совпадений: "+num+"<br>";
line += item[which][4] + "<br>"+link+"</td></tr>";
document.getElementById('sub').innerHTML=line;
return 1;
}
//  End -->
</script>
</HEAD>


htm:
<BODY>
<center>
<form method=get action="javascript:void(0)" onSubmit="search(this); return false;">
<tr><td><input name=srchval type=text value="0" size="45">
<input type=submit value="Поиск">
</td></tr>
</form>
</center>
<div id="sub" style="background:#00CCFF; width:600px; height:500px;">
</div>
</BODY>

sp3d 16.11.2008 09:02

Проверив в браузере Навигатор, показал ошибку что пременая "win" в функции "search" неопределенна.
Вообщето я переделываю код
оригинал скрипта вот такой:
<SCRIPT LANGUAGE="">
c=0; item[c]=new Array("index.html","","Стартовая 
.........................................
..........................................
c++; item[c]=new Array("logo.jpg","main/images/","Значок","ссылка,рисунок,картинка,графика","Картинка.");

page="<html><head><title>Результаты поиска</title></head><body bgcolor='white'><center><table border=0 cellspacing=10 width=80%>";

function search(frm) {
win = window.open("","","scrollbars");
win.document.write(page);
txt = frm.srchval.value.split(" ");
fnd = new Array(); total=0;
for (i = 0; i < item.length; i++) {
fnd[i] = 0; order = new Array(0, 4, 2, 3);
for (j = 0; j < order.length; j++)
for (k = 0; k < txt.length; k++)
if (item[i][order[j]].toLowerCase().indexOf(txt[k]) > -1 && txt[k] != "")
fnd[i] += (j+1);
}
for (i = 0; i < fnd.length; i++) {
n = 0; w = -1;
for (j = 0;j < fnd.length; j++)
if (fnd[j] > n) { n = fnd[j]; w = j; };
if (w > -1) total += show(w, win, n);
fnd[w] = 0;
}
win.document.write("</table><br>Всего найдено: "+total+"<br></body></html>");
win.document.close();
}
function show(which,wind,num) {
link = item[which][1] + item[which][0];
line = "<tr><td><a href='"+link+"'>"+item[which][2]+"</a> Совпадений: "+num+"<br>";
line += item[which][4] + "<br>"+link+"</td></tr>";
wind.document.write(line);
return 1;
}
//  End -->
</script>


В оригинале результат создается в новом окне, а заказчику нужно чтоб в этом же. Поискав на форуме, нашел
как это сделать с помощью
document.getElementById('ID').innerHTML='результат';

но такая замена не работает
Делал и с помощью "iframe" получилось, но заказчик категорически против "iframe", связанно это с индексакцией в поисковых машинах (вот такой продвинутый заказчик).
Ошибка походу в этом "win" и в оригинале есть еще одно, что я не смог понять откуда берется
это "wind"(wind.document.write(line)). Пробовал убирать эти переменные или заменять на "sub" (<div id="sub" ) не помогло. Кто что посоветует...

Zibba 16.11.2008 11:49

Оригинал появляется в новом окне из-за использования document.write() который перезаписывает текущий документ, для того чтобы все было в этом же окне Вам придется использовать innerHTML как вы уже и сами это поняли.

wind - на сколько я разобрался это один из аргументов функции show() который передается при ее вызове.

А в общем, смутно понимаю что Вам требуется, да и код который Вы написали изобилует непонятными .....................

sp3d 16.11.2008 12:35

Цитата:

код который Вы написали изобилует непонятными ......
Zibba, Вы абсолютно правы! Дело в том, что я в javascript нуб, только начинаю изучать.
Пытаюсь изучать на примерах, мне так легче (AS2 изучил блогодаря примерам).
помучился ночь и немного утром, путем тыка вроде нашел выход. Все отображается, но появились другие заковырки, немогу найти, как реализовать очистку, иначе он скидывает разные запросы в одну кучу.
вот измененый код:
<SCRIPT LANGUAGE="JavaScript">
var item = new Array();
c=0; item[c]=new Array("index.html","","Стартовая страница","index,основная,0,стартовая","Демонстрация поискового механизма для сайта.");
c++; item[c]=new Array("about.htm","","Обо мне","об,автор,контакты,email,кто","Контактная информация с автором страницы.");
............................................
...........................................
c++; item[c]=new Array("logo2.jpg","main/images/","Значок","ссылка,рисунок,картинка,графика","Картинка.");

function search(frm) {
txt = frm.srchval.value.split(" ");
fnd = new Array(); total=0;
for (i = 0; i < item.length; i++) {
fnd[i] = 0; order = new Array(0, 4, 2, 3);
for (j = 0; j < order.length; j++)
for (k = 0; k < txt.length; k++)
if (item[i][order[j]].toLowerCase().indexOf(txt[k]) > -1 && txt[k] != "")
fnd[i] += (j+1);
}
for (i = 0; i < fnd.length; i++) {
n = 0; w = -1;
for (j = 0;j < fnd.length; j++)
if (fnd[j] > n) { n = fnd[j]; w = j; };
if (w > -1) total += show(w, n);
fnd[w] = 0;
}
document.getElementById('rez').innerHTML ="Всего найдено: "+total+" страниц";

}

function show(which,num) {
link = item[which][1] + item[which][0];
line ="<a href='"+link+"'>"+item[which][2]+"</a>&nbsp;Совпадений: "+num+"<br>";
line += item[which][4] + "<br>"+link+"<br>";
document.getElementById('itog').innerHTML +=line;
return 1;
}

пришлось добавить еще дивы, иначе не выводилась информация
HTML:
<center>
<div id="forma">
<form method=get action="javascript:void(0)" onSubmit="search(this); return false;">
<input name=srchval type=text value="с" size="45">
<input type="image" src="opr.gif">
    </form>
</div>
<div id="rez">
</div>
<div id="itog">
</div>
</center>

Zibba 16.11.2008 12:49

Предполагаю дело в глобальном массиве item, куда вы судя по всему и записываете все данные, далее использую в обоих функциях.

sp3d 16.11.2008 12:59

Нет не пойдет, это же, так сказать база, если я очищу item, то база будет пустая. Как тогда будет работать поиск, он же будет выдовать 0 или просто пусто

Kolyaj 16.11.2008 14:55

Цитата:

Сообщение от sp3d
Проверив в браузере Навигатор

В каком каком браузере?

sp3d 16.11.2008 17:09

Цитата:

Сообщение от Kolyaj (Сообщение 8494)
В каком каком браузере?

Netscape Navigator, просто не знал в чем протестить
Может посоветуешь в чем тестить Javascript на наличие ошибки

Kolyaj 16.11.2008 17:13

Цитата:

Сообщение от sp3d
Может посоветуешь в чем тестить Javascript на наличие ошибки

Во всех браузерах, которыми пользуются в данный момент пользователи. Навигатором никто не пользуется :)

sp3d 16.11.2008 17:37

да я знаю, что им не пользуются. В опере кансоль какая то глючная, или сам браузер встал криво, поэтому пришлось пользоватся навигатором.
Но я имел ввиду не браузер, а софт, чтоб загрузил в него документ, и если есть ошибки, то показал, вообщем примерно так.

Octane 16.11.2008 17:42

«Netscape Navigator» навигатор последних версий — это тот же «Mozilla Firefox 2», только с другой темой оформления и несколькими предустановленными плагинами, но все он больше развиваться не будет…

Zibba 16.11.2008 19:39

Вы случаем не из убежища 13? Только там могут юзать этот браузер :D

А если вам редактор кода, то я например пользую Aptana Studio, ну проверяем как всегда в мозиле фаербагом.

sp3d 16.11.2008 19:57

Цитата:

Сообщение от Zibba (Сообщение 8501)
Вы случаем не из убежища 13? Только там могут юзать этот браузер

Читайте постом выше, почему мне пришлось его юзать!
Цитата:

Сообщение от Zibba (Сообщение 8501)
А если вам редактор кода...

Ненужен, я писал чтоб проверять на ошибки. Типа, открыл в пргограмме, как в браузере, а он внизу показывает, если есть ошибки, то в какой строке ошибка или неверная запись, может знаете, как во флеше панель "вывод ошибок", а редоктор у меня Dreamweaver, мне хватает, да и привык к нему. Я уже понял, что такого чуда для JS нет.

Zibba 16.11.2008 20:02

Ну Aptana studio выводит и ошбибки и на валидность проверяет. А так плагин к FF - Firebug.

А вообще каждому свое + на данном сайте был целый ряд статей про средства отладки. Поищите хорошо)

sp3d 16.11.2008 20:10

Цитата:

Сообщение от Zibba (Сообщение 8503)
А так плагин к FF - Firebug.

Что такое FF?
Ясно, спасибо за мысль! поищу.

Zibba 16.11.2008 20:32

FF - http://ru.wikipedia.org/wiki/FireFox

Kolyaj 17.11.2008 12:02

sp3d,
поймите одну простую вещь -- в разных браузерах и ошибки разные.

sp3d 17.11.2008 14:49

Ну с проверкой более-менее ясно.
Но вот сталкнулся еще с непонятным, код работает неправильно в IE.
В Opere все показывает нормально. То есть, если по запросу найдено 9стр. то, Operа показывает все 9 ссылок, а IE только одну.
для IE надо что то дописывать?

sp3d 17.11.2008 15:49

По поводу отображения разобрался, только не понял почему такой способ в IE показывает результат только одну строчку...
код:
function search(frm) {
txt = frm.srchval.value.split(" ");
fnd = new Array(); total=0;
for (i = 0; i < item.length; i++) {
fnd[i] = 0; order = new Array(0, 4, 2, 3);
for (j = 0; j < order.length; j++)
for (k = 0; k < txt.length; k++)
if (item[i][order[j]].toLowerCase().indexOf(txt[k]) > -1 && txt[k] != "")
fnd[i] += (j+1);
}
for (i = 0; i < fnd.length; i++) {
n = 0; w = -1;
for (j = 0;j < fnd.length; j++)
if (fnd[j] > n) { n = fnd[j]; w = j; };
if (w > -1) total += show(w, n);
fnd[w] = 0;
}
document.getElementById('rez').innerHTML ="По вашему запросу найдено: "+total+" страниц";
total +=total;
}
//----------------------------->
function show(which,num) {
link = item[which][1] + item[which][0];
line ="<br>Link: &nbsp;&nbsp;<a href='"+link+"'>"+item[which][2]+"</a><br>Описание: &nbsp;&nbsp;"+item[which][4] + "<br>";
line +="<div id='koncovka' align='center'>найдено: ("+num+") совпадений</div><br>";
document.getElementById('itog').innerHTML +=line;
return 1;
}

А в этом способе все нормально:
function search(frm) {
txt = frm.srchval.value.split(" ");
fnd = new Array(); total=0;
for (i = 0; i < item.length; i++) {
fnd[i] = 0; order = new Array(0, 4, 2, 3);
for (j = 0; j < order.length; j++)
for (k = 0; k < txt.length; k++)
if (item[i][order[j]].toLowerCase().indexOf(txt[k]) > -1 && txt[k] != "")
fnd[i] += (j+1);
}
for (i = 0; i < fnd.length; i++) {
n = 0; w = -1;
for (j = 0;j < fnd.length; j++)
if (fnd[j] > n) { n = fnd[j]; w = j; };
if (w > -1) total += show(w, n);
fnd[w] = 0;
}
document.getElementById('rez').innerHTML ="По вашему запросу найдено: "+total+" страниц";
total +=total;
}
//----------------------------->
function show(which,num) {
link = item[which][1] + item[which][0];
line1 ="<br>Link: &nbsp;&nbsp;<a href='"+link+"'>"+item[which][2]+"</a><br>Описание: &nbsp;&nbsp;"+item[which][4] + "<br>";
line2 ="<div id='koncovka' align='center'>найдено: ("+num+") совпадений</div><br>";
document.getElementById('itog').innerHTML +=line1+line2;
return 1;
}


Кто нибудь зает как сделать очистку результата?!
Пытался делать так, как в AS2, очистить форму:
document.getElementById('itog').innerHTML ="";

но не получилось.

Kolyaj 17.11.2008 15:55

sp3d,
вы думаете много народу втыкает в ваши неотформатированные портянки кода?

Zibba 17.11.2008 16:02

Да, было бы намного приятнее если бы Вы выкладывали измененный участок :)

Kolyaj 17.11.2008 16:22

И, как минимум, с отступами.

sp3d 20.11.2008 18:43

По поводу изменений в коде, то они выделенны строчкой (//------->)
Вот измененый:
line1 =" Link: <a href=' " + link + " ' > " + item[which][2] + " </a> Описание: "+ item[which][4];

line2 = " <div id = ' koncovka ' align = ' center ' > найдено: (" + num + " ) совпадений </div> ";

document.getElementById(' itog ').innerHTML += line1 + line2;

Теперь, кто что скажет?!
Или все-же дело не в
"неотформатированные портянки" и "И, как минимум, с отступами." и "выкладывали измененный участок"

Kolyaj 20.11.2008 18:48

Что непонятно? Вы не знаете, зачем в коде отступы делают?

sp3d 20.11.2008 19:26

Знаю, что такое отступы.
Но скажу из своего опыты. Если я вижу, что человек пишет -"что в AS2 только начинающий"- и просит помочь разобратся в коде, то если я знаю ответ сначало пишу ему ответ и потом уже замечания. Хотя, опять же из своего опыта, у меня не сразу получалось сие форматирование, чего же требовать от незнающего?!

Kolyaj 20.11.2008 20:13

Вы думаете здесь компиляторы сидят, которым пофиг на то, как код оформлен? Читать-то ваши портянки, чтобы дать вам ответ, как?

Андрей Параничев 20.11.2008 21:56

Я хочу вам помочь, но мне неудобно это делать. Сделайте html файл с проблемным скриптом, который можно просто открыть и посмотреть. Потому что по такому коду сложно определить в чем проблема.

sp3d 20.11.2008 22:06

Kolyaj,
А на других форумах, что компиляторы сидят?! Нет уважаемый, там сидят люди.
Но, на этом и остановимся. Мой вопрос решен.
Всем спасибо за помощь!

Gozar 27.11.2008 23:59

Замучали бедного, он же написал что нуб, нежнее надо к народу, а то какже поколение некст, которое js учит по книжкам "Библия javascript"?

Kolyaj 28.11.2008 00:21

Gozar,
вам бы тоже не помешало бы научиться оформлять код, ага. :)

Gozar 28.11.2008 00:38

согласен, критика правильная, постараюсь исправиться, надеюсь что лень не помешает мне это сделать =(

Kolyaj 28.11.2008 09:02

Над формочкой ввода комментария есть кнопка "javascript" (треться слева).

Zibba 28.11.2008 23:13

Угу такая полезная эта "библия js" что можно печку растапливать. Как по мне так лучше "Подробного руководства" Флэнагана книжки пока не сделали.


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