Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   пропадает значение type="text" (https://javascript.ru/forum/misc/27513-propadaet-znachenie-type%3D-text.html)

bpystep 15.04.2012 19:30

пропадает значение type="text"
 
function changeField(id) {
	var elem = document.getElementById(id);
	var value = elem.innerText; 
		elem.innerHTML='';
	var input = document.createElement('input');
		input.type = "text"; 
		input.name = id; 
		input.value = value; 
		input.onchange = function() {
			return validation_edit_user_admin(input,elem,value);
		}
	elem.appendChild(input);
}

function validation_edit_user_admin(node,elem,value) {
	var reg = "^[\.\s 0-9a-zA-Z_-]+$";
	var flags = "i";
	var p = regular(reg, flags, node.value);
	if (p) {
		if (document.getElementById('error')) $(document.getElementById('error')).remove();
		node.style.color = '#00ff00';
		//alert(node.value); даст парвильное значение, то что и должно быть
		elem.innerHTML += '<br><a>сохранить</a>'; //но вот здесь в поле input будет пусто. куда-то пропадает node.value
		//alert(node.value); также даст правильное значение, то что и должно быть, следовательно оно хранится, а не удаляется
	}
	else {
		node.style.color = '#ff0000';
		if (!document.getElementById('error')) {
			var tr = document.getElementById(value);
			var td = document.createElement('td');
			td.id = 'error';
			td.innerText = 'недопустимые символы';
			td.style.color = '#ffff00';
			tr.appendChild(td);
		}
	}
}

Gvozd 15.04.2012 19:50

Цитата:

Сообщение от bpystep
elem.innerHTML += '<br><a>сохранить</a>';

Эта строчка аналогична строке
var old_html = elem.innerHTML;
var new_html = old_html + '<br><a>сохранить</a>'//<input type="text" value="" /><br><a>сохранить</a>'
elem.innerHTML = new_html;


При этом все что находилось внутри elem - было из него убрано, и создано по-новой.
То есть INPUT в нем после этой операции, и INPUT до операции - это разные INPUT-ы.
Ссылку на старый INPUT вы сохранили в переменную node, и поэтому в этой переменной ссылка на старый элемент со старыми данными.
А вот новый элемент был создан уже без этих данных.

То же самое происходит с обработчиками события на INPUT_е: Вы повесили их на старый INPUT, а новый был создан без них.

Для того чтобы старые элементы сохранялись надо добавлять новые методами DOM, напрмиер через appendChild()

bpystep 15.04.2012 20:08

по-моему разобрался, спасибо за пояснения.
посмотри, правильно ли я все сделал, может быть будут другие замечания?
function validation_edit_user_admin(node,elem,value) {
	reg = "^[\.\s 0-9a-zA-Z_-]+$";
	var flags = "i";
	var p = regular(reg, flags, node.value);
	if (p) {
		if (document.getElementById('error')) $(document.getElementById('error')).remove();
		node.style.color = '#00ff00';
		if (!document.getElementById('saveGet')) {
			var a = document.createElement('a')
				a.innerHTML = '<br>сохранить';
				a.id = 'saveGet';
			elem.appendChild(a);
		}
	}
	else {
		node.style.color = '#ff0000';
		if (document.getElementById('saveGet')) $(document.getElementById('saveGet')).remove();
		if (!document.getElementById('error')) {
			var tr = document.getElementById(value);
			var td = document.createElement('td');
			td.id = 'error';
			td.innerText = 'недопустимые символы';
			td.style.color = '#ffff00';
			tr.appendChild(td);
		}
	}
}

Gvozd 15.04.2012 20:11

Цитата:

Сообщение от bpystep
правильно ли я все сделал

вроде да

bpystep 15.04.2012 20:14

благодарю за помощь


Часовой пояс GMT +3, время: 13:05.