Показать сообщение отдельно
  #8 (permalink)  
Старый 20.03.2015, 12:23
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 182

У тебя неверная "архитектура".
Поскольку с массивом items предполагается работа из нескольких функций, значит один единственный экземпляр должен быть доступен для работы во всех функциях. Для этого нужно сделать его глобальным. т.е. объявить так
window.items = [];

Всякий раз, когда ты так или иначе добавляешь элемент, ты должен писать
window.items.push(new product(/*Здесь все параметры нового продукта*/));

или
window.items[window.items.length - 1] = new product(/*Здесь все параметры нового продукта*/);

Во всех функциях (сортировка и т.д.) также обращаешься к глобальному массиву window.items.
Теперь про форму добавления. От тега FORM для удобства (и чтобы он не смущал особенностями своей работы) лучше отказаться. Задай строке TR с полями ввода некоторый id, например id="FORM_NEW_PRODUCT". Каждому полю ввода в этой форме задай атрибут name, соответствующий назначению поля, например name= name, pict, description, price. Сделай простую кнопку (не submit), на нажатие которой повесь функцию типа:
function aggregateData(){
	var data = {};
	$('#FORM_NEW_PRODUCT').find('input,select').each(function(){
		var name = $(this).attr('name');
		name && (data[name] = $(this).val());
	});
	window.items.push(new product(data));
	$('#FORM_NEW_PRODUCT').remove();/*Удаляем строку за ненадобностью*/
	/*Здесь можешь также передать полученный data в функцию, которая добавит строку с полученными данными о новом продукте в таблицу*/
}

а функцию product() переделай вот так:
function product (params) {
	if (params && typeof params === typeof {}) {
		for (var key in params) {
		this[key] = params[key];
		}
	}
	return this;
}

Учись использовать JQuery - даже Яндекс его использует.
Для общего развития почитай о вреде глобальных переменных и пользе пространств имен.
Ответить с цитированием