добавление новых текстовых полей через 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>
|
Кросс-браузерное оздание инпутов:
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, время: 13:23. |