2013-06-21 18 views
6

Im próbuje utworzyć taki element tylko z JS:Utwórz pole tekstowe przy użyciu czystego JavaScript

<input type="text" value="default"> 

Aby to zrobić, próbowałem ten kod:

var mi = document.createElement("input"); 
mi.type= "text" 
mi.value = "default" 

Ale kiedy go uruchomić w Chrome Dev Tools, tworzy tylko ten element:

<input type="text"> 

Czego mi brakuje?

+0

Czy możesz wstawić kod, którego używasz do wstawienia elementu do DOM? –

+1

Co jest nie tak, czy ta wartość nie pojawia się na stronie ani w przesyłaniu? – Bergi

Odpowiedz

19

Ustawianie własność o HTMLElement nie jest dokładnie taki sam, jak ustawienie to atrybut do tej samej rzeczy.

Najprawdopodobniej chciał użyć element.setAttribute

var mi = document.createElement("input"); 
mi.setAttribute('type', 'text'); 
mi.setAttribute('value', 'default'); 

Teraz widać

new XMLSerializer().serializeToString(mi); 
// "<input type="text" value="default">" 

W przykładzie, wartośćwyświetlane przez <input> nadal będzie default, to po prostu nieprawdaż” t ustawiony jako atrybut.

Należy również zauważyć, że jeśli użytkownik zmieni wartość z <input>, np. typy do niego, ustawienie atrybut nie zmieni już wartości , ale ustawienie wartości wartość nadal będzie go zmieniać. Ponownie, dlatego, że atrybut jest inny niż właściwość .

+1

+1 dla jasnego wyjaśnienia –

+2

Uwaga: Aby ustawić lub zmodyfikować bieżące wartości, należy użyć ich właściwości, gdy jest to możliwe. Na przykład użyj 'elt.value = val' zamiast' elt.setAttribute ('value', val) ', z powodu niespójności między przeglądarkami i środowiskami, w szczególności XUL i IE (IE z użyciem' class' zamiast 'className'). Wykonaj małe wyszukiwanie, jeśli chcesz wiedzieć/zrozumieć więcej. +1. Kod OP powinien działać dobrze: [jsfiddle] (http://jsfiddle.net/Xotic750/cD8zZ/) – Xotic750

0

Myślę, że brakuje wam; po "tekście".

+4

średniki nie są wymagane ... ale preferowane – claustrofob

2
var i = document.createElement("input"); //input element, text 
i.setAttribute('type',"text"); 
i.setAttribute('name',"username"); 
i.setAttribute('value',"default"); 
Powiązane problemy