Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Кнопка очистить поле file (https://javascript.ru/forum/dom-window/21547-knopka-ochistit-pole-file.html)

Nitro_Generate 14.09.2011 14:18

Кнопка очистить поле file
 
Ребята, помогите пожалуйста.
Столкнулся с такой проблемой, нужно было написать скрипт для отдельной очистки поля с типом файл.
Собственно вот он:

function ClearFile(idForm)
{
   var form = document.getElementById(idForm);
   var values = new Array(form.elements.length);
   for (var i = 0; i < form.elements.length; i++) 
   {
      values[i] = form.elements.item(i).value;
   }
    form.reset();  
   for (var i = 0; i < form.elements.length; i++)
   {
      if(form.elements.item(i).type != 'file') 
	        {
         form.elements.item(i).value = values[i];
      }
   }
}

<br /><input type="button" value="<?=$lang[300]?>" onclick="ClearFile('fMain');" />

Принцип работы таков, сначала мы запоминаем все поля, потом чистим всю форму и обратно восстанавливаем все поля кроме полей с типом file.
Все работает, очищаются все поля c типом file, но чекбоксы, если были отмечены, слетают. Перерыл кучу литературы, не знаю что делать =(

nikita.mmf 14.09.2011 15:41

а еще радио и селеты будут слетать
http://javascript.ru/forum/misc/2090...tml#post121940
Попробуйте это решение, но оно не заточено под select с multiple. Если нет обработчиков на input type file, то самое просто решение просто удалять его и вставлять новый.

melky 14.09.2011 18:07

у type=text, textarea, type=password, type=hidden, type=select значение хранится в свойстве value строкового типа.

у чекбоксов и радиобоксов значение считывается из свойства checked, которой должно быть булевого типа (true\false).

поэтому и слетают

Nitro_Generate 15.09.2011 10:46

Хмм... тогда как решить ? Может создать второй массив, в который записывать все checked, если этот checked выделен.
Записываем:
- сначала пробегаемся по первому с value.
- потом по второму с checked аналогично записывая
стираем все.
Восстанавливаем сначала все value где тип не файл
затем восстанавливаем все checked.
Что-то мне подсказывает что это плохая идея.

melky 16.09.2011 09:14

nikita.mmf, предложил отличный способ - удалять и создавать заново type="file" и не е-ся с многочисленными полями

в JQUERY это даже можно сделать, не убирая обработчиков onchange (функция detach)

Nitro_Generate 23.09.2011 11:59

Спасибо melky,
Просто хочется что бы на всех браузерах скрипт хорошо отрабатывал, но что-то я все больше склоняюсь к тому, что нужно тупо адаптировать под одни из последних версий популярных браузеров. =(

melky 23.09.2011 12:16

Цитата:

Сообщение от Nitro_Generate (Сообщение 127776)
Просто хочется что бы на всех браузерах скрипт хорошо отрабатывал, но что-то я все больше склоняюсь к тому, что нужно тупо адаптировать под одни из последних версий популярных браузеров. =(

удалить элемент и поставить новый (или заменить) можно в любом пк браузере :)


Часовой пояс GMT +3, время: 12:27.