2013-10-15 3 views
0

Я использую JavaScript динамически добавлять текстовые поля в DIVзначения текстового поля исчезает, когда я добавить новый с JavaScript

function moreLink(){ 
//gco is global, starts from 1, limit of textfields added is 10 

if (gco!=10){ 
    var newLinkb=[]; 

     document.getElementById("extraLink").innerHTML+="<br>"; 
    newLinkb[gco]= document.createElement('input'); 
    newLinkb[gco].setAttribute('type','text'); 
    newLinkb[gco].setAttribute('id',gco);   
    document.getElementById("extraLink").appendChild(newLinkb[gco]);    

    gco++; 

     } 

else{ alert ('sorry, cannot add more, limit is 10'); 
     } 

} 

Итак, когда я нажимаю правую кнопку, вызывает moreLink функция которым добавляет новое текстовое поле тип ввода.

Проблема заключается в том, что если я пишу что-то в первом текстовом поле и нажимаю кнопку, появляется второе текстовое поле, но текст в первом (значение) исчезает.

Как это исправить?

Благодаря

+0

Просто для вас. Вы не можете установить идентификатор, начинающийся с номера. 'setAttribute ('id', gco);' – Dvir

+1

@Dvir, [вы можете] (http://stackoverflow.com/questions/70579/what-are-valid-values-for-the-id-attribute-in- html/18453687 # 18453687) в HTML5 – Sergio

+0

Возможно, вы хотите, чтобы массив 'newLinkb' также был глобальным, а не каждый раз создавал новый (пустой)? Затем также используйте 'newLinkb.length' вместо' gco' – Bergi

ответ

3
document.getElementById("extraLink").innerHTML+="<br>"; 

Это делает stringify (сериализации) РОВ #extraLink, добавить строку к нему, а затем разобрать его снова. Все значения в DOM (входы, пользовательские свойства, обработчики событий) будут потеряны. Вместо этого используйте надлежащие методы DOM, избегайте innerHTML!

document.getElementById("extraLink").appendChild(document.createElement("br")); 
+0

Строго, все встроенные атрибуты и их значения (включая слушатели) * должны быть * сохранены innerHTML. Большая разница в том, что происходит со свойствами - некоторые браузеры отражают измененные значения в атрибутах, другие - нет. W3C немного боролся с определением того, как работает свойство [innerHTML] (http://domparsing.spec.whatwg.org/#innerhtml), возможно потому, что он по своей сути довольно сложный, и реализации, которые были вокруг в течение некоторого времени, вполне другой. – RobG

+0

@RobG: Я писал «атрибуты»? Я имел в виду объекты (неотредактированные) DOM-объекты. Конечно, все измененные атрибуты HTML будут сохранены. – Bergi

+0

Не атрибуты, но «обработчики событий», которые могут быть строчными или динамическими, а свойства могут отображаться или не отражаться в зависимости от браузера. ;-) Всецело согласен с использованием innerHTML только для тривиального содержимого. – RobG

0

Если вы работаете appendChild на DIV, или другой элемент, он становится частью из его innerHTML, однако значение не будет.

Try:

document.getElementById("extraLink").appendChild(document.createElement('br')); 
Смежные вопросы