2015-04-28 39 views
1

這行代碼:的setAttribute()我期望的方式不起作用到

document.getElementById('01').getElementsByTagName("input")[0].setAttribute("value", "1"); 

工作完全正常時,「輸入」已經沒有價值。但是當輸入已經有一個值時,它不會改變這個值。這是爲什麼?

+3

你試過.value = 1而不是.setAttribute(「value」,「1」)?? – Sushil

+0

如果是我自己,我只會將元素存儲在var中,並使用var.value = 1而不是使用setAttribute方法。如果這不符合您的總體目標,請在您的聲明中發佈一些代碼,我們會讓您修復。 – Fata1Err0r

+0

@Sushil是的,謝謝。這樣可行。 –

回答

9

聽起來像是你面對元素屬性valuevalue屬性之間的混淆。那些是不一樣的東西。

問題在於value-attribute服務於默認值的目的,因此如果該元素已經具有屬性值,那麼更改value-attribute將不會反映在UI中。

文件說this

使用的setAttribute()來修改某些屬性,在XUL最顯着的價值,工作不一致,因爲屬性指定的默認值。要訪問或修改當前值,應該使用屬性。例如,使用elt.value而不是elt.setAttribute('value',val)。

因此證明這種情況考慮這個小演示:

document.getElementById("01").getElementsByTagName("input")[0].value = 'property set'; 
 

 
document.getElementById("01").getElementsByTagName("input")[0].setAttribute("value", "two");
<div id="01"> 
 
    <input type="text" /> 
 
</div>

在上面的代碼中的值屬性確實更新珍惜two,你可以驗證它,如果你嘗試用getAttribute('value')來讀回它,但是value-property優先於attribute,所以以後不會渲染。

1

當標記已具有value屬性時,JavaScript絕對會更改<input>標記的值。在這裏看到自己:輸入字段http://jsfiddle.net/qg7d4m32/

+0

同意。我認爲他的問題在於他正在改變一次,然後試圖再次改變它。在這種情況下,取決於他如何調用函數/事件,就是爲什麼它看起來並不像它正在改變。希望他會爲我們發佈更多的代碼。 – Fata1Err0r

+0

好吧,我親眼看到了。我試了一下,但沒有奏效。不管他們說什麼。 –

+0

@zahramoradi爲我們發佈您的一些代碼(輸入,您的javascript),以便我們可以爲您提供適當的幫助。 – Fata1Err0r

1

如果要設置一定的價值,使用價值

純JavaScript:

document.getElementById('01').getElementsByTagName("input")[0].value = "value" 

的jQuery:

$("input").val("value") 
+0

我認爲他使用的是常規JavaScript,而不是jQuery。不過,我同意這篇文章,學習jQuery,你會讓生活變得更容易。 – Fata1Err0r

+0

作者請求了一個javascript解決方案,這意味着沒有人應該強制jQuery給他。另外,請注意,jQuery不再相關。 – KarelG

+0

@KarelG雖然我同意沒有人應該爲一個簡單的JavaScript問題強制使用jQuery解決方案,但說jQuery不再相關,這是非常大膽的... – War10ck

相關問題