проблема со сбросом формы
Здравствуйте, кто-нибудь сталкивался с проблемой сброса значений по умолчанию у формы? А именно, после изменения скриптом значений полей типа text и hidden с помощью
document.getElementById(ElId).value=newValue и нажатия кнопки reset значения сбрасываются только у полей типа text(у Opera, FF, chrome), а у IE всё норм. На данный момент изменил все hidden на невидимые text, но не считаю это совсем правильным. Интересно мнение форумчан по этому вопросу, работа первых 3-х браузеров как-то объяснима? Или это баг? |
На самом деле это не проблема и у IE тут не всё норм, а всё как обычно - что хочу, то и делаю. Само предназначение кнопки - "очистить поля, измененные пользователем" говорит, что очищает она видимые элементы. Так что невидимые text инпуты - нормальное решение.
|
Спецификация http://www.w3.org/TR/REC-html40-9712...#initial-value
When activated, a reset button resets all controls to their initial values. Только что нашёл. Может у меня плохо с английским, но вроде речь идёт о всех элементах формы...=) |
можно удалить вручную:
<!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> |
Цитата:
Цитата:
|
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 в параметрах функции? |
Цитата:
Цитата:
http://jquery-docs.ru/utilities/jquery-each/ |
спасибо, а то хотел english-версию читать уже. С ним у меня не гладко, поэтому изрядно помогли.
|
<!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. Не проверял, но работать должно. |
а можно просто написать небольшой 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> |
Часовой пояс GMT +3, время: 22:15. |