не работает код! студентка мучается уже два дня! помогите!
Всем здравствуйте!
Прошу простой помощи, студентка четвертого курса, начали изучать JS, а преподаватель плохо помогает в написании кода. Найдите ошибку, я не пойму что не так. Задание. Создайте новый объект Goods для хранения информации о наличии товара в магазине. Объект должен иметь свойства name - наименование товара (строка); value - количество этого товара; price - его цена. Далее необходимо с помощью наследования из объекта Array описать объект Storeroom, который хранит массив объектов Goods. Для объекта необходимо поддерживать методы add( name, value, price) - добавить новый товар (или увеличить его количество, если товар с наименованием name уже имеется. В этом случае цена товара может измениться на новое значение price); changePrice( name, newPrice) - изменить цену товара name на новую newPrice; sold( name, value) - отметить, что количество value товара name было продано; toString() - вывести таблицу с указанием товара, его количества и цены, имеющегося на складе. Решение: <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> </HEAD> <BODY> <script LANGUAGE = "JavaScript"> function Goods (name, value, price) { this.name = name; this.value = value; this.price = price; this,toString = toString; } function toString() { parent.frame2.document.write ("Товар:" + this.name + " Количество: " + this.value + " Цена: " + this.price + "<br>"); } function add() { Storeroom[leng] = new Goods(document.Catalog.name1.value, document.Catalog.value1.value, document.Catalog.price1.value); parent.frame2.document.write ("Товар: " +Storeroom[leng].name + " Количество: " + Storeroom[leng].value + " Цена: " + Storeroom[leng].price + "<br>" ); } function changePrice() { var Proverka = 0 for (i = 0; i < leng; i++) { if (document.Catalog.name2.value ==Storeroom[i].name) { Storeroom[i].price = document.Catalog.price2.value; Proverka = 1; } } if (Proverka == 0) alert("Нет такого товара"); } Function sold() { var Proverka = 0; var SaleKol = parseFloat(document.Catalog.value3.value); var OldKol; var NewKol; for (i = 0; i<leng; i++) { if (document.Catalog.name3.value == Storeroom[i].name) { OldKol = parseFloat(Storeroom[i].value); if (SaleKol <= OldKol) { NewKol = OldKol - SaleKol; Storeroom[i].value = NewKol; Proverka = 1; } else { alert("Количество проданного товара не может превышать имеющийся запас!"); Proverka = 2; } } } if (Proverka ==0) alert("Такого товара нет в списке"); } </SCRIPT> <body bgcolor="white" text="black"> <FONT SIZE = 5> <script LANGUAGE = "JavaScript"> Storeroom = new Array(); Storeroom[0] = new Goods ("Хлеб", "30", "50"); Storeroom[1] = new Goods ("Молоко", "50", "70"); Storeroom[2] = new Goods ("Сыр", "6", "200"); Storeroom[3] = new Goods ("Пряники", "4", "45"); var leng = Storeroom.length; </SCRIPT> <FORM NAME = "Catalog"> <font color="red"> <H2 align = left><u> Список товаров </u></H2><br> Для просмотра списка товаров нажмите на кнопку "Каталог". <br><br> <INPUT TYPE = "button" NAME = "Spisok" VALUE = "Каталог" onClick = "parent.frame2.location.href = 'about.blank'; Storeroom.toString();"> </font> <font color="blue"> <H2 align=left><u> Добавление товара</u></H2><br> Для добавления товара в каталог, введите наименование, цену и количество и нажмите кнопку "Добавить" <PRE> <INPUT TYPE = "text" NAME = "name1"VALUE="наименование"> <INPUT TYPE = "text" NAME = "value1"VALUE="количество"> <INPUT TYPE = "text" NAME = "price1"VALUE="цена"> </PRE> <INPUT TYPE = "button" NAME = "Addname"VALUE="Добавить" onClick="add();leng=leng+1;"> <br> </font> <font color="green"> <H`1 align = left><u> Изменение цены </u></H1><br> Для изменения цены товара, введите наименование этого товара и его новую цену и нажмите "Изменить цену". Чтобы посмотреть изменение цены в каталоге необходимо обновить его, нажав два раза "Каталог". <br> <PRE> <INPUT TYPE = "text" NAME = "name2" VALUE = "наименование"> <INPUT TYPE = "text" NAME = "price2" VALUE = "цена"> </PRE> <INPUT TYPE = "button" NAME = "ChangePrice" VALUE = "Изменить цену" onClick = "changePrice()"> <br><br> </font> <font color="pink"> <h1 align = left><u> Изменение количества </u></h1><br> Для того, чтобы вычесть проданное количество товара, необходимо ввести в форму его наименование и количество проданного товара и нажать "Изменить количество". Чтобы посмотреть изменение количества товара в каталоге необходимо обновить его, нажав два раза "Каталог". <br> <PRE> <INPUT TYPE = "text" NAME = "name3" VALUE = "наименование"> <INPUT TYPE = "text" NAME = "value3" VALUE = "количество"> </PRE> <INPUT TYPE = "button" NAME = "ChangeValue" VALUE = "Изменить количество" onClick = "sold()"> <br><br> </font> </form> </body> </html> кнопки не функционируют...ничего не происходит...хотя по теории написала вроде все правильно. месяц этот язык изучаю. помогите пожалуйста |
В консоль ошибок посмотри - сразу увидишь, в чем проблема.
Цитата:
|
Очень плохо, что не учат обращаться с отладчиком. Там и ошибки показываются, но главное, можно всё наглядно увидеть. У тебя опечатки. Например, 12-я строка - запятая перед .toString, вместо точки; 38-я строка - function с большой буквы. А ещё плохо, что студентов не научат писать нормально, чтобы потом не переучиваться. Начиная от форматирования, заканчивая устаревшими атрибутами, кодом в разметке и способами получения элементов.
Но главное. Раз уж ты так акцентируешь на том, что ты студентка, мы требуем СИСЕК!!! Я сейчас супер-серьёзно: ![]() |
Цитата:
Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Да, кстати - тег form, атрибуты name, - все это нужно для взаимодействия с php. В твоем случае, где чистый javascript, в этом нет надобности. Еще - теги pre для сохранения переносов строк и font для изменения характеристик шрифта уже давно никто не использует. Впринципе, все современные страницы, в основном, описываются тегами <div>, <span> и <table>. Как же изменять шрифт, оставлять переносы строк, изменять цвет текста? Для этого есть css - язык описания внешнего вида документа. Вот так он выглядит:
<html> <head> <style> /*Содержание тега <style> - это и есть css*/ /*Описываем, что текст внутри элементов с атрибутом class, равным bluetext, должен быть голубым*/ .bluetext { color: blue; } /*Аналогично*/ .pre { white-space: pre; } /*А вот здесь мы находим элемент по идентификатору*/ #yellow_background { background-color: yellow; } </style> </head> <body> <div class="bluetext">Здесь текст будет выведен голубым</div> <div class="pre">Здесь переносы строк будут сохранены </div> <div id="yellow_background"> А здесь фон будет желтым. И, да, этот элемент css будет находить по идентификатору. </div> </body> </html> То есть, css - это конструкции вида Код:
как найти элемент |
вся проблема в том, что нас заставляют писать в блокноте. старые обычаи у преподавателей, что еще сказать.
|
Sweet,
сисек и в интернете много, если студентка - не значит что такая простая в разводе на непристойности.))))) |
Erolast,
спасибо, много нового и интересного мне открылось)))) просто с JS я мягко сказать на "ВЫ", поэтому все так плохо. не учат совершенно, а самой сложно разбираться. когда что-то начинает работать, ко мне подходит преподаватель и спрашивает "как ты это сделала?!!!" наш университет дошел уже до крайней точки.((( |
отладчик ругается на "parent.frame2" пишет "is undefined", что я могла забыть?
|
Ну правильно отладчик пишет. Parent.frame2 is undefined. Потому-что таких элементов на странице нету. Я вот вообще не понял, что это и зачем это - наверное, сие слишком олдскульно для меня)
http://learn.javascript.ru/play/UMbMcc Вырезал все это parent.frame2. Поправил форматирование - блоки кода принято отбивать с помощью клавиши tab, при этом код становится во много раз читаемее, закоментил часть кода с непонятным для меня значением, но явно нарушающим валидность, исправил ошибки в тегах - например, <body> повторялся дважды, перенес код с объявлением объектов и функций в <head>. Нет, ну в общем-то все равно, где он распологается, но принято такие вещи в <head> размещать. Поменял кодировку на UTF-8 - сейчас везде используется именно это кодировка, пиши в ней. Верстку не стал на нормальную переделывать - вдруг преподаватель придерется, но могу показать как было бы лучше, если интересно. |
И у тебя в коде есть одна большая ошибка - document.write используется только на этапе генерирования страницы. Когда страница готова, document.write будет затирать все содержимое, что, собственно, у тебя сейчас и происходит. Чтобы как-то выводить пользователю информацию, надо создать специальный элемент (например, блок - <div>), проставить ему идентификатор (output можно) и управлять его содержимым из функций вывода. Показываю:
<html> <head> <script> function insertText() { document.getElementById("output").innerHTML = document.getElementById("myinput").value; } </script> <style> #output { width: 300px; height: 100px; border: 2px ridge blue; word-wrap: break-word; } </style> </head> <body> <input id="myinput" type="text" placeholder="Здесь введите текст" /> <input type="button" value="ОК" onclick="insertText()" /> <div id="output"> Здесь будет выводиться текст. </div> </body> </html> |
Erolast,
спасибо огромное за помощь! просмотрела код - разобралась, что к чему! просто преподаватель скорее всего берет примеры кода, которые дает в теории к лабораторной в интернете и не проверяет работающие они или нет, а выдает их за правильные программы, а точнее как должно быть. грустно это, конечно. Но про верстку мне интересно, если не сложно, с удовольствием мы посмотрела, как правильно. |
Цитата:
<div> - блочный элемент, то есть, его ширина равна 100% от родительского элемента либо специально указанной в стилевом свойстве width. Высота блока равна высоте его содержимого либо указанной в стилевом свойстве height. Так или иначе, любой блочный элемент не дает уместиться в том же ряду ни одному другому: <div style="color: blue">Блок.</div> <button>Трям</button> Несмотря на то, что между элементами не стоит тега переноса строки <br />, они находятся на разных строках. Тег <span> - строчный элемент. И ширина, и высота блока равны высоте его содержимого, насильно задать их невозможно. В одном ряду может распологаться сколько угодно строчных элементов. <span style="background-color: yellow; height: 500px; width: 300px;"> Трям </span> <span style="background-color: pink; height: 100px; width: 1px;"> Другой трям </span> Стиль отображения элемента может быть указан через стилевое свойство display. Полный список возможных его значений можно просмотреть тут. Основные значения:
К элементам принято обращаться по уникальному идентификатору, а не через имя. <div id="mydiv">Траляля</div> <script>alert(document.getElementById('mydiv').innerHTML)</script> Формы используются только в тех случаях, когда необходима коммуникация с сервером. |
спасибо огромное за затраченное время!!! разобралась!
|
Erolast,
у меня кнопка добавления не добавляет товар в массив и не выводит его в каталоге, в чем может быть проблема? я уже все пересмотрела, ошибок компилятор не пишет, она просто не работает |
Ну просто так ответить невозможно, это надо код видеть.
|
Erolast,
<html> <head> <meta http-equiv="content-type" content="text/html; charset=in-1251" /> <script LANGUAGE = "JavaScript"> function Goods (name, value, price) { this.name = name; this.value = value; this.price = price; this.toString = toString; } function toString() { document.write("Товар:" + this.name + " Количество: " + this.value + " Цена: " + this.price + "<br>"); } function add() { Storeroom[leng] = new Goods(document.Catalog.name1.value, document.Catalog.value1.value, document.Catalog.price1.value); document.write ("Товар: " +Storeroom[leng].name + " Количество: " + Storeroom[leng].value + " Цена: " + Storeroom[leng].price + "<br>" ); } function changePrice() { var Proverka = 0 for (i = 0; i < leng; i++) { if (document.Catalog.name2.value ==Storeroom[i].name) { Storeroom[i].price = document.Catalog.price2.value; Proverka = 1; } } } //if (Proverka == 0) alert("Нет такого товара"); //} function sold() { var Proverka = 0; var SaleKol = parseFloat(document.Catalog.value3.value); var OldKol; var NewKol; for (i = 0; i<leng; i++) { if (document.Catalog.name3.value == Storeroom[i].name) { OldKol = parseFloat(Storeroom[i].value); if (SaleKol <= OldKol) { NewKol = OldKol - SaleKol; Storeroom[i].value = NewKol; Proverka = 1; } else { alert("Количество проданного товара не может превышать имеющийся запас!"); Proverka = 2; } } } if (Proverka == 0) alert("Такого товара нет в списке"); } </script> </head> <body bgcolor="white" text="black"> <font size=5> <script LANGUAGE = "JavaScript"> Storeroom = new Array(); Storeroom[0] = new Goods ("Хлеб", "30", "50"); Storeroom[1] = new Goods ("Молоко", "50", "70"); Storeroom[2] = new Goods ("Сыр", "6", "200"); Storeroom[3] = new Goods ("Пряники", "4", "45"); var leng = Storeroom.length; </script> <form NAME = "Catalog"> <font color="red"> <H2 align = left><u> Список товаров </u></H2><br> Для просмотра списка товаров нажмите на кнопку "Каталог". <br><br> <INPUT TYPE = "button" NAME = "Spisok" VALUE = "Каталог" onClick = "Storeroom.toString();"> </font> <font color="blue"> <H2 align=left><u> Добавление товара</u></H2><br> Для добавления товара в каталог, введите наименование, цену и количество и нажмите кнопку "Добавить" <PRE> <INPUT TYPE = "text" NAME = "name1"VALUE="наименование"> <INPUT TYPE = "text" NAME = "value1"VALUE="количество"> <INPUT TYPE = "text" NAME = "price1"VALUE="цена"> </PRE> <INPUT TYPE = "button" NAME = "Addname"VALUE="Добавить" onClick="add();leng=leng+1;"> <br> </font> <font color="green"> <H1 align = left><u> Изменение цены </u></H1><br> Для изменения цены товара, введите наименование этого товара и его новую цену и нажмите "Изменить цену". Чтобы посмотреть изменение цены в каталоге необходимо обновить его, нажав два раза "Каталог". <br> <PRE> <INPUT TYPE = "text" NAME = "name2" VALUE = "наименование"> <INPUT TYPE = "text" NAME = "price2" VALUE = "цена"> </PRE> <INPUT TYPE = "button" NAME = "ChangePrice" VALUE = "Изменить цену" onClick = "changePrice()"> <br><br> </font> <font color="pink"> <h1 align = left><u> Изменение количества </u></h1><br> Для того, чтобы вычесть проданное количество товара, необходимо ввести в форму его наименование и количество проданного товара и нажать "Изменить количество". Чтобы посмотреть изменение количества товара в каталоге необходимо обновить его, нажав два раза "Каталог". <br> <PRE> <INPUT TYPE = "text" NAME = "name3" VALUE = "наименование"> <INPUT TYPE = "text" NAME = "value3" VALUE = "количество"> </PRE> <INPUT TYPE = "button" NAME = "ChangeValue" VALUE = "Изменить количество" onClick = "sold()"> <br><br> </font> </form> </font> </body> </html> |
Erolast,
вот функция add не работает |
В сообщениях на этом форуме обрамляй код в тег html (либо js для чистого js, css для чистого css, php для php). Если хочешь добавить кнопку "посмотреть" - приписывай атрибут run в тег.
Блоки кода нужно отбивать клавишей tab, тогда код становится во много раз читабельней. Когда нужно добавить единицу к переменной, используй инкремент: var x = 1; x++; alert(x) Либо, если нужно отнять единицу, декремент: var x = 1; x--; alert(x); Методы объекта принято назначать внутри конструктора объекта, а не в глобальном пространстве, вот таким образом: function myObjConstructor() { this.run = function() { alert("Привет!"); } } И главное - ты до сих пор используешь для вывода document.write. Не надо так, при этом полностью затирается вся страница, включая все переменные. Естественно, ничего и не показывается. Используй хотя бы alert вместо него. |
Часовой пояс GMT +3, время: 22:53. |