强制attr更新后,JQuery html()调用不返回值

时间:2010-12-10 18:34:03

标签: jquery firefox dom

也许我不理解这里的基本内容,但是html()调用不返回填充了所有属性的元素,即使在显式调用设置属性之后也是如此。

例如,我有一个文本框:

<input type="text" id="foo" value="" />

当用户在此框中填写一个值时,会调用一个函数(输入文本框的onBlur)。

$('#foo').blur(function(event) { updateFoo(this); });

在该函数中存在以下代码:

function updateFoo(input) {
  // force DOM update??
  $('#'+input.id).attr('value', input.value);

  // successfully displays value user entered
  alert($('#'+input.id).attr('value')); 

  // displays input element, with value not filled in,
  // like: 'input type="text" id="foo" value="" />'
  alert($('#'+input.id).parent().html()); 

  ...
}

html()调用不应该返回值属性设置的元素吗?

我在Max OSX上使用Firefox 3.6.13。

我看过这个论坛帖子:http://forums.asp.net/t/1578929.aspx 我根据我的一些假设...

谢谢, 盖伦

2 个答案:

答案 0 :(得分:4)

在研究了一些之后,我碰到了这篇文章:

jQuery html() in Firefox (uses .innerHTML) ignores DOM changes

几乎总结了我遇到的问题。基本上它是一个firefox实现问题......

而不是:

$('#'+input.id).attr('value', input.value);

我现在正在使用:

input.setAttribute('value', input.value); // force DOM update

解决了这个问题。

答案 1 :(得分:2)

我认为这是value具有非常专业用途的事实的副作用。我想这个值存储在一些本地属性中,而不是存储在DOM本身中。

如果您将attr更改为其他内容,例如newattr,则可以正常使用:

http://jsfiddle.net/m9vWT/

当然,这对value属性...

没有帮助