Показать сообщение отдельно
  #1 (permalink)  
Старый 23.09.2010, 15:07
Новичок на форуме
Отправить личное сообщение для мшеул Посмотреть профиль Найти все сообщения от мшеул
 
Регистрация: 23.09.2010
Сообщений: 7

проблема со свойством name при использовании appendChild()
Здравствуйте. Проблема следующая.
//возвращает элемент select с заданными параметрами
function getSlc(slcParam){
	//alert('sel1');
	//var selParam = {sId:'id',sName:'name',sItems:[]};
	var slc = document.createElement('SELECT');		
		slc.id   = slcParam.sId;		
		slc.name = slcParam.sName;
		slc.setAttribute('NAME',slcParam.sName);				//в IE работает а так slc.name = 'name' нет...
	if(slcParam.sFunct != undefined){
		var slcMethod     = slcParam.sFunct.sMethod;
		var usrHandler    = slcParam.sFunct.sHandler;
		var usrHandlerArg = slcParam.sFunct.sHandlerArg;
		//alert(usrHandler+'('+usrHandlerArg+')');
		slc.onchange = usrHandler+'('+usrHandlerArg+')'; 		//грамотно вот так (function() {func(arg);}); #@$%#$%!!!!	TODO но не работает! почему!!!?
		//slc.setAttribute(slcMethod,usrHandler);
	}
	var len = slcParam.sItems.length;
	var defaultItems  = 0; var defaultItemsFlag   = false;
	var selectedItems = 0; var selectedItemsFlag  = false;
	//цикл по основному списку-источнику полей
	for(var i=0; i<len; i+=1){
		if ( i == defaultItems)	{ defaultItemsFlag = true; }else{ defaultItemsFlag = false; }				//опция, которая выделена
		if ( i == selectedItems) { selectedItemsFlag = true; }else{ selectedItemsFlag  = false; }		 	//опция, которая будет выделена при сбросе формы
		var opt = new Option(slcParam.sItems[i],i,defaultItemsFlag,selectedItemsFlag);						//var newOpt = new Option("text", "value", isDefaultSelected, isSelected);
		slc.options[i] = opt;
	}
	//alert('slc name: '+slc.name);
	return slc;
}

//возвращает строку опций для поля фильтра
function  getFFOptionsRow(table,i,field2R){
	var tablePreffiks = 'FF';
	var newRow = table.insertRow(-1);										//добавляем строку в созданной таблице
		newRow.className = 'tableData';
		newRow.id        = tablePreffiks+'tableData_'+field2R.key[i];
		//имя поля
		var newCell = newRow.insertCell(-1);								//в созданной строке добавляем столбец
			newCell.align     = 'right';									//указываем позиционирование по центру
			newCell.innerHTML = '&nbsp'+field2R.val[i]+'&nbsp';
		//тип фильтра
		var newCell = newRow.insertCell(-1);								//в созданной строке добавляем столбец
			newCell.align     = 'center';									//указываем позиционирование по центру
				var slcParam = {
									sId    : 'field_'+field2R.key[i]+'_filter_type_slc',
									sName  : 'field_'+field2R.key[i]+'_filter_type',
									sItems : globalArrayOfFilterTypes
								};
				var slc  = getSlc(slcParam);
				alert('slc name: '+slc.name);
				var buf = document.createElement('SELECT');					//опять работа ушами... ну не хочет appendChild добавлять элемент нормально - событие почему-то записано нормально с функцией, а не срабатывает (при повторном добавлениии новых строк в уже существующую таблицу)				
				buf.appendChild(slc);
				alert('buf: '+buf.innerHTML);
			newCell.innerHTML = buf.innerHTML;
			//newCell.appendChild(slc);			
}

При добавлении элемента select (slc) свойство name, устанавливаемое в getSlc(slcParam) куда-то пропадает. Статьи про различия свойств и аттрибутов прочитал и различия вроде понял. Но почему через slc.setAttribute('name',slcParam.sName); работает, а через свойство name - нет. Да, все это безобразие проверяется под IE8.

Последний раз редактировалось мшеул, 23.09.2010 в 15:11.
Ответить с цитированием