Вызов JQuery html () не возвращает значение после принудительного обновления attr - PullRequest
3 голосов
/ 10 декабря 2010

Возможно, я не понимаю чего-то базового здесь, но вызов 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?

Я использую Firefox 3.6.13 на Max OSX.

Я видел это сообщение на форуме: http://forums.asp.net/t/1578929.aspx, на котором я основывал некоторые свои предположения на ...

Спасибо, Гален

Ответы [ 2 ]

4 голосов
/ 10 декабря 2010

После исследования, я наткнулся на этот пост:

jQuery html () в Firefox (использует .innerHTML) игнорирует изменения DOM

, что в значительной степени подводит итог моей проблемы. По сути, это проблема реализации Firefox ...

Вместо:

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

Я сейчас использую:

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

который решил проблему.

2 голосов
/ 10 декабря 2010

Я думаю, что это побочный эффект того факта, что value имеет очень специализированное использование.Я полагаю, что значение хранится в каком-то локальном свойстве, а не в самом DOM.

Если вы измените attr на что-то другое, например newattr, оно прекрасно работает:

http://jsfiddle.net/m9vWT/

Конечно, это не помогает с атрибутом value ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...