Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.07.2013, 11:00
Новичок на форуме
Отправить личное сообщение для dimka_68 Посмотреть профиль Найти все сообщения от dimka_68
 
Регистрация: 16.07.2013
Сообщений: 7

проблема со сбросом формы
Здравствуйте, кто-нибудь сталкивался с проблемой сброса значений по умолчанию у формы? А именно, после изменения скриптом значений полей типа text и hidden с помощью
document.getElementById(ElId).value=newValue

и нажатия кнопки reset значения сбрасываются только у полей типа text(у Opera, FF, chrome), а у IE всё норм.
На данный момент изменил все hidden на невидимые text, но не считаю это совсем правильным. Интересно мнение форумчан по этому вопросу, работа первых 3-х браузеров как-то объяснима? Или это баг?
Ответить с цитированием
  #2 (permalink)  
Старый 24.07.2013, 11:53
Аватар для zilker
Профессор
Отправить личное сообщение для zilker Посмотреть профиль Найти все сообщения от zilker
 
Регистрация: 30.07.2011
Сообщений: 189

На самом деле это не проблема и у IE тут не всё норм, а всё как обычно - что хочу, то и делаю. Само предназначение кнопки - "очистить поля, измененные пользователем" говорит, что очищает она видимые элементы. Так что невидимые text инпуты - нормальное решение.
Ответить с цитированием
  #3 (permalink)  
Старый 24.07.2013, 12:51
Новичок на форуме
Отправить личное сообщение для dimka_68 Посмотреть профиль Найти все сообщения от dimka_68
 
Регистрация: 16.07.2013
Сообщений: 7

Спецификация http://www.w3.org/TR/REC-html40-9712...#initial-value
When activated, a reset button resets all controls to their initial values.
Только что нашёл. Может у меня плохо с английским, но вроде речь идёт о всех элементах формы...=)
Ответить с цитированием
  #4 (permalink)  
Старый 24.07.2013, 14:24
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

можно удалить вручную:
<!DOCTYPE HTML>
<html>
  <head>
	  <meta charset="utf-8">
  </head>
  <body>
	<form>
		<input class="clear" type="hidden" value="234" default-value="234111">
		<input class="clear" type="text" value="2345" default-value="2345">
		<textarea class="clear" default-value="25">25</textarea>
		<input type="button" value="reset">
	</form>
	<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
	
	$('form input:button').click(function()
		{
		$('form .clear').each(function(index, elem)
			{
			$(elem).val($(elem).attr('default-value'));
			});
		});
		
    </script>
  </body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 24.07.2013, 14:42
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от dimka_68
Может у меня плохо с английским, но вроде речь идёт о всех элементах формы...=)
Сообщение от dimka_68
resets all controls to their initial values.
слово controls уже говорит о контролах изменяемых пользователям. А тег INPUT с типом hidden не является контролом, а просто невидимым тегом имеющим некое значение.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 24.07.2013, 15:11
Новичок на форуме
Отправить личное сообщение для dimka_68 Посмотреть профиль Найти все сообщения от dimka_68
 
Регистрация: 16.07.2013
Сообщений: 7

devote, давайте ссылаться на спецификации, а не на своё имхо, когда дело касается определений правил функционирования объектов:
17.2.1 Control types
HTML defines the following control types:
- buttons
- checkboxes
- radio buttons
- menus
- text input
- file select
- hidden controls
- object controls

skrudjmakdak, интересное решение, спасибо, попробую потом. Правда я jquery не пользуюсь пока, обходился без неё. Если несложно, можете написать откуда берутся index и elem в параметрах функции?
Ответить с цитированием
  #7 (permalink)  
Старый 24.07.2013, 15:20
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

Сообщение от dimka_68 Посмотреть сообщение
Правда я jquery не пользуюсь пока, обходился без неё.
jquery очень удобная. в плане код становится короче. и кроссбраузерная, не нужно задумываться о том, будет ли этот js работать в других браузерах или нет..


Сообщение от dimka_68 Посмотреть сообщение
можете написать откуда берутся index и elem в параметрах функции?
вот русская документация, в данной урле идет рассказ именно о функции each
http://jquery-docs.ru/utilities/jquery-each/
Ответить с цитированием
  #8 (permalink)  
Старый 24.07.2013, 15:27
Новичок на форуме
Отправить личное сообщение для dimka_68 Посмотреть профиль Найти все сообщения от dimka_68
 
Регистрация: 16.07.2013
Сообщений: 7

спасибо, а то хотел english-версию читать уже. С ним у меня не гладко, поэтому изрядно помогли.
Ответить с цитированием
  #9 (permalink)  
Старый 24.07.2013, 16:53
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

<!DOCTYPE HTML>
<html>
  <head>
	  <meta charset="utf-8">
  </head>
  <body>
	<form>
		<input class="clear" type="hidden" value="234" default-value="234111">
		<input class="clear" type="text" value="2345" default-value="2345">
		<textarea class="clear" default-value="25">25</textarea>
		<input type="button" value="reset" onclick="resetForm(this)">
	</form>
	<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
    function resetForm(a) {
        a = a.parentNode.getElementsByClassName('clear');
        for(var i=0; i<a.length; i++) if(b) a[i].value = a[i].getAttribute('default-value');
    }	
    </script>
  </body>
</html>


Без jQuery. Не проверял, но работать должно.

Последний раз редактировалось ruslan_mart, 24.07.2013 в 17:16.
Ответить с цитированием
  #10 (permalink)  
Старый 24.07.2013, 17:12
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

а можно просто написать небольшой Polyfill который будет исправлять данную проблему:
<!DOCTYPE HTML>
<html>
  <head>
      <meta charset="utf-8">
      <script type="text/javascript">
          document.addEventListener && document.addEventListener('DOMContentLoaded', function() {
              var forms = document.getElementsByTagName('form');
              for(var i = forms.length, form; form = forms[--i];) {
                  updateHidden(form);
                  form.addEventListener('reset', function(e) {
                      updateHidden(e.target);
                  }, false);
              }
              function updateHidden(form) {
                  var inputs = form.getElementsByTagName('input');
                  for(var i = inputs.length, input; input = inputs[--i];) {
                      if (input.type === 'hidden') {
                          if ('_defaultValue' in input) {
                              input.value = input._defaultValue;
                          } else {
                              input._defaultValue = input.value;
                          }
                      }
                  }
              }
          });
      </script>
  </head>
  <body>
      <form>
          <input type="hidden" value="234">
          <input type="text" value="2345">
          <textarea>25</textarea>
          <input type="reset" value="Сбросить">
      </form>
  </body>
</html>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP + Ajax : проблема с отправкой формы... Talker AJAX и COMET 1 04.04.2013 18:16
Проблема с обновлением формы на $.ajax функцыи Svjatoslav AJAX и COMET 0 27.04.2012 16:44
Проблема с Dialog. Блокировка элементов формы Vitus jQuery 1 28.02.2011 10:17
Проблема с отправкой multipart формы tmlder Events/DOM/Window 0 14.10.2010 11:04
Проблема с обработкой формы в IE Check'Yr'Head Общие вопросы Javascript 1 15.12.2009 12:20