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

Posted

技术标签:

【中文标题】强制 attr 更新后 JQuery html() 调用不返回值【英文标题】:JQuery html() call doesn't return value after forcing attr update 【发布时间】:2011-05-23 15:54:57 【问题描述】:

也许我在这里没有理解一些基本的东西,但是 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()调用不应该返回设置了value属性的元素吗?

我在 Max OSX 上使用 Firefox 3.6.13。

我看到了这个论坛帖子:http://forums.asp.net/t/1578929.aspx 我的一些假设基于...

谢谢, 盖伦

【问题讨论】:

【参考方案1】:

在研究了更多之后,我看到了这篇文章:

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

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

代替:

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

我现在正在使用:

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

解决了这个问题。

【讨论】:

【参考方案2】:

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

如果您将attr 更改为其他内容,例如newattr,它可以正常工作:

http://jsfiddle.net/m9vWT/

当然,这对value 属性没有帮助...

【讨论】:

感谢您的回复。是的,新属性似乎更新得很好。我以另一种方式解决了这个问题(请参阅我在这篇文章中的回答)

以上是关于强制 attr 更新后 JQuery html() 调用不返回值的主要内容,如果未能解决你的问题,请参考以下文章

jQuery学习之prop和attr的区别

jquery中attr和prop的区别

jquery中attr和prop的区别

160225jquery中attr和prop的区别

使用 jQuery 更新按钮上的 data-attr

Jquery学习笔记--jquery中attr和prop的区别精辟