Проверка типа файла перед отправкой
Здравствуйте. После долгих мучений написал код, который проверяет перед отправкой, что за файл ему хочет отправить пользователь. Скрипт в итоге должен позволять оnправлять только файлы типа .doc и .docx, а если пользователь подсовывает ему другого типа файл, скрипт выдает алерт (мол, нужен только правильный тип файла, загрузите другой), и очищает input file.
А загвоздка такая - в IE и Opera сей скрипт работает некорректно - при первом "подсовывании" левого файла скрипт срабатывает, а при втором - уже нет. В мозилле, хроме все норм работает. Вот код: <script language="JavaScript"> function newkrechet() { if(username.value.substring(username.value.lastIndexOf('.')+1,username.value.length).toLowerCase()!='doc') { if (username.value.substring(username.value.lastIndexOf('.')+1,username.value.length).toLowerCase()!='docx') {alert('Необходимо выбрать .doc или .docx файл для загрузки!'); clearFileInput();};};} </script> <script language="JavaScript"> function clearFileInput() { document.getElementById("fileinputplace").innerHTML='<input name="file_name[]" required="required" type="file" id="username" size="26" onChange="javascript: newkrechet();">'; } </script> <form> <span id="fileinputplace"><input type="file" required="required" name="file_name[]" id="username" size="26" onChange="javascript:if(username.value.substring(username.value.lastIndexOf('.')+1,username.value.length).toLowerCase()!='doc') { if (username.value.substring(username.value.lastIndexOf('.')+1,username.value.length).toLowerCase()!='docx') {alert('Необходимо выбрать .doc или .docx файл для загрузки!'); clearFileInput();};};"></span> </form> Причем если убрать теги <form> </form>, то скрипт роботает во всех браузерах. Но если их оставить (а их нельзя убрать), то корректная работа будет только в мозилле и хроме....Посоветуйте, как что поправить... |
Цитата:
|
хм, ничего не понял) при чем здесь сервер...
|
multipart/form-data я разумеется пропишу, если что
|
При том ,что получить строку из инпут файл нельзя-политика браузера не позволит. И то что вы что то получаете,получаете только потому что, страница тестируемая не на сервере расположена, можете получить что то, при совпадении некоторых условий изза багов браузеров.
|
|
в серверной проверке расширения
|
к сожалению, это исключено...мой код можно добить всё же? Исхитриться как-нибудь с тегом <form>?
|
mav1,
Вы фразу -политика безопасности браузеров-как себе представляете? http://javascript.ru/forum/misc/1322...om-fajjla.html |
а вообще используйте стандартный сброс формы reset() и не городите- document.getElementById("fileinputplace").innerHTM L='<input name="file_name[]" required="required" type="file" id="username" size="26" onChange="javascript: newkrechet();">';
|
ох, с удовольствием бы юзал резет, но там форма большая - все поля сбросятся(
|
c удовольствием юзал бы резет, но форма большая, полей много - все сбросится
|
name="file_name[] -зачем []?
function clearFileInput() { document.getElementById("username").value=""; } и в newkrechet() сделайте проверку на пустоту поля. если поле =="" алерт не выводить |
с предложенной вами функцией не хочет работать(
|
<form> <span id="fileinputplace"><input type="file" required="required" name="file_name" id="username" size="26" onChange="proverka(this)"</span> </form> <script> function proverka(elem) { if (elem.value.match(/^[^\.]+\.doc(x)?$/i)) alert('true') else { alert("error"); elem.value=""; } } </script> |
очистка формы не производится при этом, т.е. пользователь все равно нажмет кнопку загрузить - и загрузит
|
Цитата:
ну тогда заменяйте содержимое спана. а обработчик подключайте не в innerHTML а через document.getElementById("username").onchange=фу� �кция а ещё проще скрывать кнопка сабмита если расширение не то |
если честно, не совсем понял...ведь я и так заменял содержимое спана в своем примере? Так как теперь должен выглядеть код))
|
mav1,
Самое простое - всовывать onclick="TestFile()" в кнопку submit А Перед формой ставим тестирующий скрипт <script type="text/javascript"> <!-- function TestFile() { //Проверка //Если удачно return true; //Если неудачно return false; } </script> |
Часовой пояс GMT +3, время: 16:53. |