新创建的input-element忽略属性更改

时间:2011-03-27 20:25:17

标签: javascript jquery html dom

为什么

  

$(“< input type ='text'value ='Foo'/>”)。val(“Bar”)

产生一个对象(如调试器控制台中所示):

  

< input type =“text”value =“Foo”>

现在我改变它的价值不应该是“Bar”吗?

我的猜测是,它与元素不属于文档有关 我该如何解决这个限制?

我想避免在那时将元素插入到文档中。但是,稍后使用attr("value")的代码应该会得到正确的结果。

3 个答案:

答案 0 :(得分:1)

In this test元素未插入到文档中,其值为“Bar”,如预期的那样。可能是控制台出了问题。

答案 1 :(得分:0)

你会这样做吗? http://jsfiddle.net/mazzzzz/q6bfp/1/

答案 2 :(得分:0)

好的 - 我终于找到并解决了这个问题:

首先,正如评论中所指出的,分离元素的HTML(尤其是属性)似乎与实际的元素属性保持同步。将元素插入文档后会发生这种情况 我现在意识到的这个问题让我很烦恼地调试我的代码并且无法找到第二个。谢谢你帮我发现它!

其次,我使用“属性”属性循环遍历元素的属性 简短说明(没有循环):

var $input = $("<input type='text' value='Foo' />");
$input.val("Bar");     
alert($input.attr("value") + " - " + $input.get(0).attributes["value"].value);

只要$ input不是文档的一部分,此代码就会提醒“Bar - Foo”。 我通过调用attribute.value来取代对$element.attr(attribute.name)的调用来解决此问题。