Показать сообщение отдельно
  #2 (permalink)  
Старый 23.08.2011, 11:02
Аспирант
Отправить личное сообщение для abstract Посмотреть профиль Найти все сообщения от abstract
 
Регистрация: 20.09.2010
Сообщений: 58

Проблема оказывается была в том, что в методе closeredact при присвоении cell.innerHTML=cell.children.item(0).value; firefox удаляет все вложенные в ячейку элементы, а explorer нет. Вот и события генерируются не в ячейке,а в дочерних элементах, а в них я естественно никаких перехватов не писал.
В общем чтобы заработало нужно переписать closeredact вот так:
function closeredact(element)
{
	var cell;
	while (element.tagName!='TD'){
		element=element.parentNode;
	}
	if((element.nodeType==1)&(element.tagName=='TD')){
		 cell=element;	
	}
	
	
	var textarea=cell.getElementsByTagName('TEXTAREA')[0];
	var val=textarea.value;
	cell.removeChild(textarea);//ВОТ ЗДЕСЬ ВСЯ СОЛЬ.
	var onclickattr =cell.attributes.getNamedItem('onclick');
	onclickattr.value='redact(this)';
	cell.innerHTML=val;
	
	var re=/_changed/;
	if(cell.innerHTML!=innertext){
		
		while (element.tagName!='TR'){
			element=element.parentNode;
		}
		if((element.nodeType==1)&(element.tagName=='TR')){
			var inputs=element.getElementsByTagName('input');
			for (var i=0;i<inputs.length;i++){	
				if((inputs.item(i).tagName=='INPUT')&(inputs.item(i).getAttribute('name')=='id')&
					(inputs.item(0).getAttribute('value')!='_inserted')&(!re.test(inputs.item(0).getAttribute('value')))){
					if(inputs.item(0).getAttribute('value')==""){
						inputs.item(0).setAttribute('value','_inserted');
					}else{
						var value=inputs.item(0).getAttribute('value');
						inputs.item(0).setAttribute('value',value+'_changed');
					}
				}
			}
		}
	}
}
Ответить с цитированием