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

onclick в IE не срабатывает по второму разу
Здравствуйте, уважаемые коллеги. Суть проблемы такова, в сафари, мозиле, хроме все работает как задумано, однако в IE9 функция onclick срабатывает только один раз. При повторном нажатии на ячейке таблицы ничего не происходит.
Исходники:
<table bordercolorlight="#FFFFFF"  width="1000" rules=all border="1" cellspacing="0" cellpadding="0">
        <caption>Сведения #1</caption>
        <tbody>
        <tr bgcolor="#b6dde8">
          <th style="width:0px" style="visibility:collapse"><input type="hidden" name="hidden header" value="id"/></th>
          <th style="width:350">Наименование</th>
          <th style="width:350">Фактический адрес</th>
          <th>ИНН/КПП</th>
          <th>Среднегодовая численность работников</th>
          <th>В т.ч. промышленно-производственный персонал</th>
          <th width="16">&nbsp;</th>
          <th width="16">&nbsp;</th>
        </tr>
        <tr>
          <td width="0" style="visibility:collapse"><input name="id" value="_inserted" type="hidden"></td>
          <td onclick="redact(this)"></td>
          <td onclick="redact(this)"></td>
          <td onclick="redact(this)"></td>
          <td onclick="redact(this)"></td>
          <td onclick="redact(this)"></td>
          <td width="16"><input style="width:auto" title="добавить" type="image" src="images/icons/16x16/add.png" onclick="return addline_table_2(this);" /></td>
          <td width="16"><input style="width:auto" title="удалить" type="image" src="images/icons/16x16/remove.png" onclick="return rmline_table_2(this);" /></td>
        </tr>
        </tbody>
	</table>

function redact(element)
{	
	while (element.tagName!='TD'){
		element=element.parentNode;
	}
	if((element.nodeType==1)&(element.tagName=='TD')){
		var cell=element;
		innertext=element.innerHTML;// ???????? ????????? ??????
	}
	var onclickattr =cell.attributes.getNamedItem('onclick');
	onclickattr.value='';
	
	cell.innerHTML='<textarea style="overflow: auto; width: 98%; " onblur=closeredact(this)>'+cell.innerHTML+'</textarea>';
	var textarea=cell.firstChild;
	textarea.focus();

}
function closeredact(element)
{
	while (element.tagName!='TD'){
		element=element.parentNode;
	}
	if((element.nodeType==1)&(element.tagName=='TD')){
		var cell=element;	
	}
	
	var onclickattr =cell.attributes.getNamedItem('onclick');
	onclickattr.value='redact(this)';
	cell.innerHTML=cell.children.item(0).value;
	
	//???? ???????? ????????? ?????? ? ??????
	var re=/_changed/;
	if(cell.innerHTML!=innertext){
		
		//alert('???????!'+' ????:'+innertext+' ?????:'+cell.innerHTML); ????????
		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');
					}
				}
			}
		}
	}
}
Ответить с цитированием