Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   добавление новых текстовых полей через js в форму (https://javascript.ru/forum/dom-window/6356-dobavlenie-novykh-tekstovykh-polejj-cherez-js-v-formu.html)

boris2000 25.11.2009 14:16

добавление новых текстовых полей через js в форму
 
есть форма для добавления литературного источника, в которой есть поля для списка авторов. часть авторов уже известна (массив authors_array), и пользователю надо дать возможность добавить новых авторов если необходимо. функция добавления новых авторов (moreFields) работает замечательно, а вот генерация полей на основании данных массива не работает!
Помогите разобраться.

Код:
// кусочек хтмл-кода задающего шаблон для генерации полей для авторов 
<div id="readroot" style="display: none">
	<input type="text" name="pubauthor" size="40" value="" id="pubauthor"/>
	<input type="button" value="Remove author" onclick="this.parentNode.parentNode.removeChild(this.parentNode);" />
</div>

// собственно JavaScript
<script language="JavaScript">
<!-- ;

var counter = 0;
// сгенерированный массив
authors_array = new Array("Иванов", "Петров");

function fillauthorsarray(){

	if(authors_array.length >= 1){
		for(j=0; j<=authors_array.length; j++) {
			counter++;
			var newFields = document.getElementById('readroot').cloneNode(true);
			newFields.id = '';
			newFields.style.display = 'block';
			var newField = newFields.childNodes;

			for (var i=0;i<newField.length;i++) {
				var theName = newField[i].name
				if (theName){
					newField[i].name = theName + counter;
					newField[i].id = theName + counter;
					newField[i].value = authors_array(j);
				}
			}
			var insertHere = document.getElementById('writeroot');
			insertHere.parentNode.insertBefore(newFields,insertHere);
		}
	}
}	 


function moreFields() {
	counter++;
	alert (counter );//+ authors_array(counter-1)
	var newFields = document.getElementById('readroot').cloneNode(true);
	newFields.id = '';
	newFields.style.display = 'block';
	var newField = newFields.childNodes;
	for (var i=0;i<newField.length;i++) {
		var theName = newField[i].name
		if (theName){
			newField[i].name = theName + counter;
			newField[i].id = theName + counter;
		}
	}
	var insertHere = document.getElementById('writeroot');
	insertHere.parentNode.insertBefore(newFields,insertHere);
}

window.onload = fillauthorsarray();

// end hide -->
</script>

Octane 25.11.2009 14:32

Кросс-браузерное оздание инпутов:
function parseHTML(htmlCode) {
    var node = document.createElement("div");
    node.innerHTML = htmlCode;
    return node.firstChild;
}

var input = parseHTML('<input type="…" name="…" />');


или

var input;
try {
    input = document.createElement('<input type="…" name="…" />');
}
catch (error) {
    input = document.createElement("input");
    input.type = "…";
    input.name = "…";
}


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