Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очистить INPUT TYPE=file (https://javascript.ru/forum/misc/20906-ochistit-input-type%3Dfile.html)

nikita.mmf 23.08.2011 16:50

А почему не устраивает вариант с удалением и вставкой нового? Некоторые браузеры умеют очищать поле присванием value пустой строки. Зачем четыре функции, а если будет на странице десять форм, то функций станет десять?
Ваша идея может быть реализована, например, так
function ClearFile ( idForm ) {
	var form = document.getElementById(idForm), 
		formElem, 
		values = [], 
		i = 0;
	for ( ; (formElem = form.elements[i++]); ) {
		if ( /^(?:radio|checkbox)$/.test( formElem.type ) ) {
			values[i] = formElem.checked;
		} else if ( formElem.nodeName.toLowerCase() == "select" ) {
			values[i] = formElem.selectedIndex;
		} else if ( formElem.nodeName.toLowerCase() != "fieldset" && formElem.type != "file" ) {
			values[i] = formElem.value;
		} 
	}
	form.reset();
	for ( i= 0; (formElem = form.elements[i++]); ) {
		if ( /^(?:radio|checkbox)$/.test( formElem.type ) ) {
			formElem.checked = values[i];
		} else if ( formElem.nodeName.toLowerCase() == "select" ) {
			formElem.selectedIndex = values[i];
		} else if ( formElem.nodeName.toLowerCase() != "fieldset" && formElem.type != "file" ) {
			formElem.value = values[i];
		}
	}
	from = formElem = null;
}

popov654 26.08.2011 13:00

Странно, разве напрямую нельзя манипулировать с value такого поля?

document.getElementById('f1').value = ''

Я вроде делал что-то похожее...

ваый 26.08.2011 13:11

Цитата:

Сообщение от popov654
Странно, разве напрямую нельзя манипулировать с value такого поля?

document.getElementById('f1').value = ''

Я вроде делал что-то похожее...

В случае с полем file нельзя. Это было бы небезопасно, если бы можно было программно менять значение этого поля.

nikita.mmf 26.08.2011 13:13

popov654,
можно, но не во всех браузерах, в IE6 точно нельзя

devote 27.08.2011 01:51

Цитата:

Сообщение от nikita.mmf
можно, но не во всех браузерах, в IE6 точно нельзя

а в каких можно?:blink:

melky 27.08.2011 10:02

попробуй удалить элемент и заново его создать

очистится все.. и значение, и обработчики событий.

popov654 27.08.2011 14:46

Ах ты ж ё моё :)
Так вот почему после перезагрузки фрейма с трекером в моём парсере я не мог программно изменить значение такого поля! :D
Что ж Вы мне тогда не подсказали про эту особенность, столько времени убил зря))

devote 27.08.2011 14:50

Цитата:

Сообщение от popov654
Что ж Вы мне тогда не подсказали про эту особенность, столько времени убил зря))

Ну видимо плохо спросил)


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