Подтвердить что ты не робот

Html() неправильно при изменении входного значения

По сути, у меня есть код, который должен получить HTML-код родительского элемента, когда любой из его элементов ввода размывается. Это довольно просто. Проблема в том, что HTML, возвращаемый при вызове html() в родительском элементе, не отражает текущее значение входных элементов, содержащихся внутри. То есть, в Firefox или Chrome. Он работает в IE всех мест.

Здесь JSFiddle: http://jsfiddle.net/8PJMx/15/

Попробуйте изменить "мир" в текстовом поле на "все" и нажав кнопку. Обратите внимание, что я также добавляю $.now(), чтобы вы могли видеть, что код действительно выполняется.

Как вы можете видеть, $("#parent").html() не обновляется, даже если $("#child").val() делает. Для вашего удовольствия просмотра, здесь HTML:

<div id="parent">Hello <input type='text' id="child" value='world' /></div>
<button id="separateEvent">Get HTML.</button>
<br>
<p>The HTML for #parent is:</p>
<textarea id="parentsHtml" style="width:95%; height: 100px;"></textarea>
<p>The value of #child is:</p>
<textarea id="childsValue" style="width:95%; height: 100px;"></textarea>

... и здесь JavaScript:

$("#separateEvent").click(function ()
                         {
                             $("#parentsHtml").val($("#parent").html() + "\r\[email protected]" + $.now());
                             $("#childsValue").val($("#child").val() + "\r\[email protected]" + $.now());
                         });
4b9b3361

Ответ 1

Атрибут html value="" не отражает свойство .value DOM (unintuitively), но отражает свойство .defaultValue DOM. Свойство .value не сериализуется в HTML, но .defaultValue есть.

Изменения в пользовательском входе .value, а не .defaultValue.

.value отражает только .defaultValue, когда флаг грязного значения является ложным

Вот обходной путь, который также включает пример для блоков SELECT: http://jsfiddle.net/8PJMx/20/