2010-09-26 69 views
3

我在我的網頁形式是這樣的:這是IE9 Beta中的錯誤嗎?

<input type="hidden" name="myField" value="defaultValue" /> 

後來,在一些JavaScript,我覆蓋默認值,我提交頁面到服務器之前。

var formField = document.getElementsByName("myField")[0]; 
formField.setAttribute("value", "myNewValue"); 
var form = document.getElementById("myForm"); 
form.submit(); 

所有的瀏覽器(我在IE5,IE8,Firefox,歌劇,鉻,野生動物園,...測試此代碼經過多年)正在發送 「myNewValue」 到服務器。除IE9外:它發送「defaultValue」。這裏發生了什麼?我錯過了什麼嗎?

如果我從字段中刪除「值」屬性,它也適用於IE9。如果我切換到IE8渲染模式,它也適用於IE9。

這是一個錯誤還是IE9比其他瀏覽器更符合標準?

+0

Dupe of http://stackoverflow.com/questions/3724207/html-form-default-values-override-actual-values-at-post-time-in-internet-explorer – EricLaw 2010-10-01 14:32:23

+0

有沒有人得到這個上班? 我剛剛被罰款,我們在一個項目中唯一的表格在IE9中有這個問題... 我已經搜索過,並且cna找不到任何有用的幫助。 – RickardP 2011-09-07 14:19:53

回答

0

對於HTML4,David Dorward看起來是正確的,但這似乎是向後兼容的破壞行爲,所以我期望HTML5能夠描述瀏覽器實際執行的操作。它似乎。它說,這:(我的重點)

價值的內容屬性給出了input元素的 默認值。 當值的內容屬性是 加入,設置或除去,如果 控制的髒值標記爲假, 用戶代理必須如果 該元素的值設置爲值 內容屬性的值,否則有一個或 空字符串,然後 運行當前值清理 算法(如果已定義)。

http://dev.w3.org/html5/spec/the-input-element.html#attr-input-value

您的方案沒有描述任何會設置前的setAttribute調用髒值標記,所以我相信的setAttribute調用應該設置的值屬性和 瀏覽器應該發送myNewValue不是defaultValue。

所以是的,我認爲這是一個IE9測試版的bug。

+0

那麼,設置內容值的正確方法是什麼? .value沒有辦法。我需要做什麼才能讓IE9發送myNewValue?有任何想法嗎?感謝您挖掘它! – newtogit 2010-09-26 13:59:46

2

value屬性定義爲設置initial value

表單加載完成後,該字段將其實際值設置爲初始值。

據我所知,沒有什麼說當前值應該改變,如果初始值在表單加載後發生改變,所以我會懷疑這是一個錯誤修復,而不是一個新的錯誤。

使用value屬性而不是setAttribute方法。

+0

你在告訴我那個formField嗎。值是設置當前值而formfield.setAttribute(「值」)試圖覆蓋初始值?那麼,IE9現在已經有了,所有其他瀏覽器都做錯了? – newtogit 2010-09-26 07:31:47

+0

@newtogit:實際上,IE9中的很多事情現在都是如此。是的,如果你考慮IE的歷史,這有點怪異。 – Esko 2010-09-26 07:34:42

+0

看起來這樣。在規範中可能有一些東西應該是不同的,但我沒有看到它(儘管如此,我也沒有找到它)。 – Quentin 2010-09-26 07:42:42