|
скрипт не отоброжает данные в диве
Здравствуйте!
Дело вот в чем: При нажатии на кнопку происходит следующие; Если результат поиска =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> |
Проверив в браузере Навигатор, показал ошибку что пременая "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" ) не помогло. Кто что посоветует... |
Оригинал появляется в новом окне из-за использования document.write() который перезаписывает текущий документ, для того чтобы все было в этом же окне Вам придется использовать innerHTML как вы уже и сами это поняли.
wind - на сколько я разобрался это один из аргументов функции show() который передается при ее вызове. А в общем, смутно понимаю что Вам требуется, да и код который Вы написали изобилует непонятными ..................... |
Цитата:
Пытаюсь изучать на примерах, мне так легче (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> Совпадений: "+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> |
Предполагаю дело в глобальном массиве item, куда вы судя по всему и записываете все данные, далее использую в обоих функциях.
|
Нет не пойдет, это же, так сказать база, если я очищу item, то база будет пустая. Как тогда будет работать поиск, он же будет выдовать 0 или просто пусто
|
Цитата:
|
Цитата:
Может посоветуешь в чем тестить Javascript на наличие ошибки |
Цитата:
|
да я знаю, что им не пользуются. В опере кансоль какая то глючная, или сам браузер встал криво, поэтому пришлось пользоватся навигатором.
Но я имел ввиду не браузер, а софт, чтоб загрузил в него документ, и если есть ошибки, то показал, вообщем примерно так. |
Часовой пояс GMT +3, время: 20:56. |
|