Comments 48
Вспоминается фраза: «Что человек должен был делать с коровой, когда узнал, что она дает молоко?».
Так же и у вас xD
Так же и у вас xD
не понял вашего юмора ;) поясните плиз
Сам очень интересуюсь зачем это?
часто бывают ситуации когда пользователю нужно удалить ранее выбранный файл.
пользователь может передумал отсылать что-нибудь заполняя большую форму…
пользователь может передумал отсылать что-нибудь заполняя большую форму…
Ни разу не сталкивался с таким, обычно если в форме есть файл — то он ключевой.
Но спасибо за разъяснения.
Но спасибо за разъяснения.
прикрепить фотки к письму или анкете
полей может быть несколько, пользователь сперва выбрал пять файлов в пять полей, а потом решил оставить только один.
или не отправлять фотку в этот раз.
полей может быть несколько, пользователь сперва выбрал пять файлов в пять полей, а потом решил оставить только один.
или не отправлять фотку в этот раз.
В этом случае лучше использовать вариант есть поле/нет поля. Если нужно добавить файл, нажимается кнопка добавить и появляется поле для добавления файла, а рядом с ним кнопка удаления этого поля. Таким образом мы динамически добавляем нужное нам кол-во полей. А если JS у пользователя выключен(что может встретиться менее чем у 1% пользователей) то и вашь вариант работать не будет… Но можно добавить надпись «Для возможности добавлять файлы включите JS»
Простите, я покурил xD
элемент.value = '';
а это разве не сработает?
У input type=file нет аттрибута value.
да я просто попробовал в ff 3.5 и предположил что так можно очистить и в других браузерах, просто не проверял (лень).
не работает. все манипуляции с атрибутами ничего не дали…
Если бы у него был атрибут валуе, то можно было туда вписать адрес файла и ява скриптом засубмитить форму при заходе на страницу. Сбылась бы мечта многих хакеров: как утянуть любой файл с компа жертвы.
хм… ну пока глюков не наблюдаю в ИЕ.
Побочных эффектов не наблюдалось, проект, где я этот способ применял, уже полгода в продакшене, дефектов на эту тему не постили. То есть этот способ можно считать вроде как бы надежным. Работает в IE6, IE7 и IE8.
Но идеологически это решение кривое-кривое… все же лучше от него отказаться, именно по тем соображениям, что это «специфик» браузера.
Но идеологически это решение кривое-кривое… все же лучше от него отказаться, именно по тем соображениям, что это «специфик» браузера.
Спасибо!
Пригодилось вот прямо сейчас!!!
Думал это невозможно без удаления элемента…
Спасибо еще раз!
Пригодилось вот прямо сейчас!!!
Думал это невозможно без удаления элемента…
Спасибо еще раз!
Не совсем понял для чего это нужно, скорее всего проблема высосана из пальца, но…
input type='reset'
для того и придумали.
input type='reset'
для того и придумали.
ну это очищает ВСЮ форму. а если кому-нибудь взбредёт в голову очистить только полформы — то увы. заказчики порой загадочные бывают… ;)
Я так понимаю, задача в том, чтобы сохранить значение в других полях формы. Правда их можно пересохранить и восстановить. Или поубирать из формы. Но то, что предложил автор, действительно проще.
FF 3.5.1
Не очищает.
И alert в первый раз выдает пустую строку, а в последующие разы "<input>" N-1 раз подряд, где N — количество нажатий кнопки минус 1.
<html>
<body>
<form>
<input type="file" name="test" id="test" />
<input type="button" name="clear" value="clear" onclick="alert(document.getElementById('test').innerHTML); document.getElementById('test').innerHTML = document.getElementById('test').innerHTML;" />
</form>
</body>
</html>
Не очищает.
И alert в первый раз выдает пустую строку, а в последующие разы "<input>" N-1 раз подряд, где N — количество нажатий кнопки минус 1.
Там не настолько все революционно, этот способ просто неявно удаляет и создает новое поле файлового ввода (если я не попутал способ):
designformasters.info/lab/clear-file-input/index.html
Код смотрите innerHTML не самого инпута, а контейнера в который он вложен.
designformasters.info/lab/clear-file-input/index.html
Код смотрите innerHTML не самого инпута, а контейнера в который он вложен.
код:
<html>
<head>
<script>
function clearFileInputField(Id)
{
document.getElementById(Id).innerHTML = document.getElementById(Id).innerHTML;
}
</script>
</head>
<body>
<form>
<div id="fileInputContainer">
<input id="fileInput" name="fileInput" type="file">
</div>
<a href="#" onclick="clearFileInputField('fileInputContainer'); return false;">Очистить</a>
</form>
</body>
</html>
неявно код в посте написан, я тоже сначала не вкурил какой у input[type=«file»] может быть innerHTML.
так было бы куда честнее:
так было бы куда честнее:
function clearFileInputField(Id) { document.getElementById(Id).parentNode.innerHTML += " "; }
В FF (но не в IE!) очистка будет работать, если использовать
document.getElementById('test').value = '';
проверено в FF 3.0.x
(хоть это и работает, но я на практике это не применяю, как-то не нравится мне такой подход)
document.getElementById('test').value = '';
проверено в FF 3.0.x
(хоть это и работает, но я на практике это не применяю, как-то не нравится мне такой подход)
однако
обработчики событий, прикрепленные к этой ноде через addEventListener/attachEvent перестанут срабатывать.
про такие ограничения лучше сразу говорить, пусть и можно перевесить обработчик выше
про такие ограничения лучше сразу говорить, пусть и можно перевесить обработчик выше
С использованием jQuery делаю так:
$("#file_field").replaceWith($("#file_field").clone());
Работает вроде везде и события сохраняются.
file_field — id инпута
$("#file_field").replaceWith($("#file_field").clone());
Работает вроде везде и события сохраняются.
file_field — id инпута
Да, этот способ работает, использовал на практике.
Кстати интересно, что в FF (но не в IE!) работает даже конструкция: элемент.value = '';
Да да, это не ошибка, у input type=file хоть value и является readonly, но присвоить пустое значение (таким образом сделав очистку поля) FF позволяет, это не является нарушением безопасности.
Но мой любимый способ это, конечно, reset формы… к сожалению, если нужно очистить только поле аплоада файла, не трогая остальные поля, приходится такое поле оформлять в отдельной форме… но зато работает везде, и не надо никаких извращений.
Кстати интересно, что в FF (но не в IE!) работает даже конструкция: элемент.value = '';
Да да, это не ошибка, у input type=file хоть value и является readonly, но присвоить пустое значение (таким образом сделав очистку поля) FF позволяет, это не является нарушением безопасности.
Но мой любимый способ это, конечно, reset формы… к сожалению, если нужно очистить только поле аплоада файла, не трогая остальные поля, приходится такое поле оформлять в отдельной форме… но зато работает везде, и не надо никаких извращений.
Прошу прощения, но разве использовать сброс конретного объекта (а не всей формы) не выход?
Пример:
<INPUT type="file" name="UPLOAD" title="Выбрать и загрузить файл на сервер" onchange="return upload(this.form);" />
Пример:
function upload(obj) { if (confirm('Загрузить файл на сервер?')) { obj.submit(); } else { obj.reset(); } }
а может кто знает как получить на JS путь к файлу из
<input type=file>?
Обязательно напишите, что обнулять нужно именно код контейнера, в котором лежит инпут, а то у самого инпута никакого innerHTML нет, а то топик в поиске появляется и люди потом наверняка как я теряют время, разбираясь в этом нюансе.
Sign up to leave a comment.
Очистка поля типа file