input type="file"
Здравствуйте уважаемые форумчане! Назрела одна проблема с input type="file". Меня интересует как сделать так, чтобы в input можно было добавить только картинку, а другие типы файлов не добавлялись, но при этом вылезал alert с сообщением о том, что юзер не тот файл выбрал. Помогите пожалуйста это реализовать.:)
|
<input id="file_browse" type="file" name="myfile" /> <script> document.getElementById( 'file_browse' ).onchange = function() { if ( this.value && !/\.(jpg|jpeg|bmp|gif|png)$/i.test( this.value ) ) { alert( "Вы выбрали не тот файл: " + this.value.replace( /\\/g, "/" ).split( '/' ).pop() ); } else if ( this.value ) { alert( "Все ок!" ); } } </script> |
о спасибо большое:) я тут пока сидел думал тоже кое что сообразил.
<input type="file" id="getFile" onchange="poovImg();" name="imagesInp"/> <script type="text/javascript"> function poovImg() {imageInput=document.getElementById('getFile').value; if (/[.][jpg,png,gif,JPG,GIF,PNG][^exe,EXE]/.test(imageInput)) {alert('Ok'); } else { alert('Можно загрузить картинки только в формате *.jpg, *.gif, *.png'); } } </script> |
Можете подсказать, подойдёт такой вариант или нет?
|
Сразу видно что в статью по регуляркам вы даже не заглядывали, использовали исключительно подход шамана.
alert([ /[.][jpg,png,gif,JPG,GIF,PNG]/.test( 'aaa.jng' ), /[.][jpg,png,gif,JPG,GIF,PNG]/.test( 'aaa.ggg' ), /[.][jpg,png,gif,JPG,GIF,PNG]/.test( 'aaa.ggg.xxx' ), /[.][jpg,png,gif,JPG,GIF,PNG]/.test( ',,.,,.,,' ) ]).join('\n') |
http://wufoo.com/html5/attributes/07-accept.html — может это поможет. Для старых браузеров, конечно, придется писать костыль. Хотя, возможно, есть решение на флеше.
|
Цитата:
|
нет, к сожалению accept="image/*" не подходит :( Уже пробовал
|
Цитата:
<input type="file" name="img" accept="image/*"> это не будет работать в IE9< |
А так ?
<script type="text/javascript"> <!-- function process_form(the_form) { var element_names = new Object() element_names["req_file"] = "Файл" imageType=document.getElementById('fld1').value.replace(/^\s*.*(\.[^\.\s]*)\s*$/img,'$1'); imageType=imageType.search(/[\.](?!exe|EXE)(?:jpg|png|gif|JPG|GIF|PNG)$/mg); if (imageType!=0) { alert('Неверный тип файла,\n Допустимые типы: jpg,png,gif') return false; } if (document.all || document.getElementById) { for (i = 0; i < the_form.length; ++i) { var elem = the_form.elements[i] if (elem.name && elem.name.substring(0, 4) == "req_") { if (elem.type && (elem.type=="text" || elem.type=="textarea" || elem.type=="password" || elem.type=="file") && elem.value=='') { alert("\"" + element_names[elem.name] + "\" это поле обязательно для заполнения в этой форме.") elem.focus() return false } } } } } // --> </script> <form id="upload_IMG" class="container" method="post" enctype="multipart/form-data" action="/profile.php?action=upload_avatar2&" onsubmit="return process_form(this)"> <fieldset> <legend><span>Укажите файл с изображением для загрузки</span></legend> <div class="fs-box"> <input type="hidden" name="form_sent" value="1" /> <input type="hidden" name="MAX_FILE_SIZE" value="30480" /> <p class="fldfile required"> <label for="fld1">Файл<em>(Обязательно)</em></label><br /> <span class="input"><input id="fld1" name="req_file" type="file" size="40" /></span> </p> <p class="infofield">Изображение не может быть больше чем 30480 байт (30 KB).</p> </div> </fieldset> <p class="formsubmit"><input type="submit" class="button" name="upload" value="Загрузить" /></p> </form> |
Цитата:
|
Цитата:
Цитата:
ИМХО проще загнать все требуемые расширения в массив или объект и проверять последний элемент массива, полученный путем разбивки строки по символу "." |
lord2kim,
:) А чем пост 11 не устроил ? |
Цитата:
Цитата:
|
Imхо не намного - всё остальное типовые проверки формы перед отправкой
imageType=imageType.search(/[\.](?!exe|EXE)(?:jpg|png|gif|JPG|GIF|PNG)$/mg) |
Цитата:
|
Цитата:
но большинство сидит на не лицензионном ПО...хотя и не составляет особого труда скачать и установить новую версию системы, но у людей просто времени не хватает...(не говорю о тех кому в лом) кто-то вообще сидит из офиса...в соответствии скорее всего у них установлен XP с SP1 каким-нибудь, где вообще IE 6... Цитата:
|
Maxmaxmахimus,
Есть серезная доля пенсионеров, или близко к этому -это более 1/4 населения, ну внуки наверно не интересуют(до 14лет), но это еще 1/3 Если сайт профессионально жестко ориентирован - то можно не считаться, Если оч молодежный или общевозрастной то без учета категорий со значительно устаревшими средствами коммуникации, - рейтинг ресурса падает |
Плюс это легко отключить. (я про accept="image/*")
|
Мне кажется нам надо всем написать одну функцию для проверки на изображение. Это поможет и другим пользователям избежать этой проблемы:)
|
Джэксон,
Хм -пошел открывать . спойл |
Maxmaxmахimus,
У меня есть форумы - где люди за 40, и они три пять лет сидят на ИЕ и штопают вяжут, и их "небольшая библиотека закладок" на интересующие ресурсы весит по 20-30мегов, заставить кого то сменить браузер(да они порой имеют два три, но сидят под Ие, ну будут изредка заходит с иных... Моё Имхо -Проблема решится только временем. |
Цитата:
|
Цитата:
|
Цитата:
|
Пять лет - умрут сегодняшние ИЕ, но ежли мелкософт скорость обновлений не ускорит, и будет лидировать в продаже ОS - просто очередной ослиный виток
|
Цитата:
Ослиные витки сравнимы с версиями файрфокса\хрома\оперы. Проблема не в нём, а в людишках, которые его не обновляют. вот и всё. А отзываться плохо можно о любом браузере. |
melky,
Ие 9-10 - были сделаны под 7-8 , если следущий будет под 9ку (а 7-8 делались минимум 3 года ) - за это время остальные браузеры обновятся раз по 7 Тут никто не хаит новые браузы, хают отстающие от общего русла Если б Ие было хотя б версий раза в три более, то на ИЕ 6-7 наверняка сидел бы максимум процент, А так и брауз более новый отдельно(я беру типовой случай) не поставшь и обновляется вместе с Виндой |
Цитата:
Сейчас это делает Chrome. Насчёт обновления - это да, они странно поступили с IE, обрезав обновление оного до девятой версии в Win XP. (именно с IE, а не с пользователями). Цитата:
Если у пропиаренной восьмёрки получится заставить обновиться людей, сидящих на XP (и 7), это было бы замечательно. ... а некоторых и вовсе пересесть на GNU/Linux... там проблем с обновлениями вообще нет. Только представьте: у всех разные браузеры, но они поддерживают одинаково один стандарт... люди какают в горшки из золота, и каждые 10 лет меняют дома по жребию. Ну почему мы не живём в утопии ? :( |
melky,
Основная проблема - привычка и сложности переноса - вот когда все прог. обеспечение будет в облачных хранилищах. Возможно тогда переходы на новую Ось будут проще - я вылизывал ОСЬ года три, чтоб она грузилась семь секунд, и удалял избыточные службы, (надо еще ж и совместимое прог обеспечение искать) С виртуалкой - там вообще куча наворотов,(я имею ввиду установить согласовать - дабы и юзать комфортно и ресурсы не отжирала Сейчас переустановка с востановлением всех настроек, если не из бекапа займет у меня дня три, это пользуясь шпаргалкой, Если ставить новую ось, - Полгода притирки и маты - (то забыл -это не перенес, и попутно отвлечение %20-30 от текущих забот |
Часовой пояс GMT +3, время: 23:20. |