2013-05-02 196 views
0

我正在查看一些從XML/XSL生成的網頁的相當廣泛的代碼,然後使用Javascript生成佈局。我遇到的問題是,似乎IE(特別是第10版)顯示,如果沒有值,則元素爲空文本節點,如果有值,則顯示常規文本(無可編輯字段)。創建元素後將值添加到DOM元素

這似乎改變了行爲只是直接不可編輯的文本。

從我所看到的,第一個步驟是Javascript生成通過DOM

input = document.createElement("input"); 

input.setAttribute("id", "blah"); 
input.setAttribute("type", "text"); 

元素然後將其追加到父。 然後,似乎發生的是一個函數被執行,再次運行該頁面並插入這些字段所具有的任何值。

input.value = "Hello World"; 

Chrome和Firefox將填充他們的田地正確顯示輸入字段,但IE10將只顯示值,好像它只是純文本。

我從來沒有與這類網頁生成工作,並希望有人能夠幫助我解決這個問題,所以我可以解決這個問題。改變這種工作方式(當時)不是一種選擇,所以我試圖糾正它,以便IE也很開心。

感謝

+0

也許有人在輸入中設置了'.innerHTML'? – bfavaretto 2013-05-02 22:30:34

+1

如果你可以設置一個jsfiddle例子,它會有所幫助。另外,它的'document.createElement'不是'CreateElement'。 – plalx 2013-05-02 22:31:10

+0

是的,對不起,它是代碼中的createElement()。 – Onyxdragun 2013-05-02 22:35:41

回答

2

在我試圖在(瀏覽器,IE,火狐)所有的瀏覽器這個特定的代碼串的工作原理:

var elem = document.createElement("input"); 
elem.type = "text"; 
elem.id = "test"; 
document.body.appendChild(elem); 
elem.value = "This is some text"; 

如果你確切的代碼與此不同,那麼你應該檢查差異或發佈您在IE中顯示問題的確切序列代碼,以便我們更好地瞭解如何進行調試或建議。

你可以看到這個工作演示在任何瀏覽器,你想嘗試一下在這裏:http://jsfiddle.net/jfriend00/z2FpP/

旅遊注意在你的代碼:

  1. 是任何代碼設置的.innerHTML父母可能會清除或重置子元素。
  2. input字段本身的任何代碼設置.innerHTML。這不應該做。代碼應該使用.value來設置input字段的文本。
  3. 代碼在IE中運行時是否有任何代碼錯誤?檢查錯誤控制檯或調試控制檯(在IE中按F12進入調試器,您可以在其中看到錯誤控制檯)。
  4. 是否在input字段中設置了其他任何屬性,可能會使其成爲只讀而不是可編輯的?
+0

設置該值後(並且完成該函數的其餘部分)之後會有一個函數調用執行。innerHTML 很多代碼相當神祕,因爲誰最初編寫它。有許多簡短的函數,如 函數sV(obj,val){ obj.value = val; } – Onyxdragun 2013-05-02 22:41:46

+0

@OnyxDragun - 你不希望任何代碼在父對象或輸入字段本身上設置'.innerHTML',因爲它們可能會混淆或取代'input'字段。 – jfriend00 2013-05-02 22:42:43

+0

好的..我會看看那部分 – Onyxdragun 2013-05-02 22:43:46