Как я могу предотвратить сброс формы от очистки моегоэлемент? - PullRequest
5 голосов
/ 13 августа 2010

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

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

В следующем примере нажатие RESET очищает один ввод (добавленный сценарием), но не другой (статический). Я хочу, чтобы оба входа сохранили свое значение.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.sourceforge.net/" xml:lang="en" lang="en">
    <head>
    </head>
    <body>
        <form id="container">
            <input type="reset" value="RESET" />
            <input type="text" value="DefaultValue" />
        </form>
        <script type="text/javascript">
        window.onload = function() {
            var input = document.createElement('input');
            input.setAttribute('value', 'DefaultValue2');
            document.getElementById('container').appendChild(input);
        };
        </script>
    </body>
</html>

Хотя я не включил jQuery в этот простой тестовый пример, в моем проекте используется jQuery, и я был бы рад за решение jQuery.

Ответы [ 3 ]

12 голосов
/ 13 августа 2010

Форма reset() использует свойство defaultValue, поэтому все, что вам нужно сделать, это установить ...

window.onload = function() { 
  var input = document.createElement('input');
  input.value = input.defaultValue = 'DefaultValue2';
  document.getElementById('container').appendChild(input); 
}; 
0 голосов
/ 13 августа 2010

Вам потребуется добавить больше функциональных возможностей к вводу по умолчанию для сброса, например, вы можете использовать событие onReset для установки input's value = 'defaultvalue2'. Это приведет к сбросу обоих полей ввода, одно статически, а другое - методом onReset.

0 голосов
/ 13 августа 2010

Формы имеют событие onreset, которое, согласно ppk , доступно в кросс-браузерном режиме. Если элемент, созданный в Javascript, не сбрасывается до исходного значения при нажатии кнопки сброса, вы можете использовать это событие для сброса его «вручную».

Тем не менее, по моим тестам сброс элемента, созданного javascript (в моем примере я использую Prototype, но это не должно иметь значения), работает в Firefox 3.6 и Chrome 5 без необходимости дополнительного onreset обработчик (но не в IE6).

...