Почему поле загрузки не может выбрать новый файл после того, как jQuery-validate вернет ошибку?

Я кодирую форму с помощью PHP и jQuery. У меня есть поле для загрузки файла, к которому я применил следующие правила проверки jQuery:

image: {
 accept: "jpeg|jpg|png|gif",
 required: "#edit_ID:blank"
}

Поле загрузки файла должно принимать только изображения jpeg / jpg, png или gif. Требуется только в том случае, если поле с идентификатором edit_ID оставлено пустым.

Это поле для загрузки моего файла:

<input type="file" id="image" name="image" class="input1" />

Поле загрузки файлов выбирает файлы без каких-либо проблем, но когда jQuery возвращает ошибку из-за нарушенного правила, даже если я выберу новый файл на своем компьютере, файл, который я выбрал до появления ошибки, остается там. Как будто он отключается после того, как jQuery-validate выдает ошибку.

Я попытался удалить правила, установленные для этого поля, протестировал его и не обнаружил никаких проблем.

Кто-нибудь знает, что вызывает эту проблему?

Спасибо.

P.S .: Я столкнулся с проблемой в Firefox (v.3.6.9) и IE (v.8), но не в Google Chrome (v.5).


person Catzie Carpio    schedule 21.09.2010    source источник


Ответы (1)


Технически это не ответит на ваш исходный вопрос.

Но доверять программированию на стороне клиента выполнение проверки изображения - плохая идея; вашу программу можно обмануть. Поскольку вы все равно используете PHP, почему бы не использовать PHP для проверки на стороне сервера?

Все загруженные файлы хранятся в массиве $ _FILES. Проверить тип файла можно так:

<?php
    foreach($_FILES as $file)
    {
        if(!empty($file['type'])) //only check if there's a valid file type
        {
            if($file['type'] != 'image/jpeg' && $file['type'] != 'image/png' && $file['type'] != 'image/gif')
            {
                //this file is not any one of the accepted formats, so long!
            }
            else{//do your processing}
        }
        else{//error invalid file}
    }
?>

Если вам нужна мгновенная проверка, вы все равно можете использовать AJAX вместо того, чтобы полагаться исключительно на клиентскую сторону для проверки.

person Aditya M P    schedule 21.09.2010
comment
Я предпочитаю использовать проверку на стороне клиента, чтобы пользователь не переходил на другую страницу до появления ошибок. Если я не пойму, как решить проблему с jQuery, возможно, я просто воспользуюсь PHP. - person Catzie Carpio; 22.09.2010