2013-05-02 130 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