При попытке загрузить несуществующий файл в Internet Explorer форма не отправлена - PullRequest
4 голосов
/ 27 марта 2009

У меня есть форма с input type=file. Internet Explorer позволяет пользователю вводить все, что он хочет, в этот ввод (тогда как Firefox вызывает средство выбора файлов). Если пользователь вводит явно недопустимое имя, например:

a

и пытается отправить форму, Internet Explorer даже не пытается отправить форму.

Могу ли я узнать, что это произошло, и сообщить пользователю, что это происходит с предупреждением?

Ответы [ 3 ]

1 голос
/ 30 марта 2009

Я нашел лучший способ сделать это: http://www.priddypictures.co.uk/reference/fileInputProblem.htm

Итак, если эти парни / девочки правы, и форма отправляет нормально, если у ввода нет атрибута имени, тогда:

  • напишите плагин jQuery, который (если Internet Explorer) удалит атрибут name из всех входных файлов
  • вставить другой скрытый ввод в форму с правильным именем
  • скопировать значение из файла ввода в скрытый ввод

Я мог бы написать этот плагин в какой-то момент.

1 голос
/ 27 марта 2009

Вы должны добавить событие «onclick ()» к кнопке отправки, которая вызывает функцию JavaScript, которая проверяет ваше состояние и использует «предупреждение» JavaScript, чтобы пользователь знал, что ему нужно ввести что-то, достойное отправки.

Просмотрите регулярные выражения для своих тестов.

Если вы хотите, чтобы пользователь принял решение, используйте confirm().

Если вы хотите просто предупредить их и не проверять их значение, вы можете использовать что-то вроде:

<input type="submit" value="clickme" onClick="if (confirm('Really submit?')) { this.form.submit(); }">

Вот пример кода, который даст вам значение из вызова функции JavaScript в onclick():

<html>
    <head>
        <title>hello world</title>
        <SCRIPT LANGUAGE="javascript" type="text/javascript">
            function show_me(form_elem) {
            alert(form_elem.value);
            }
        </script>
    </head>
    <body>
        <form method="GET" name="upload_form" action="index.html" target="_top">
            <input type="file" name="file_name" size="14" maxlength="256" value="">
            <br>
            <input type="submit" value="mybutton" onclick="show_me(this.form.file_name)" />
        </form>
    </body>
</html>
0 голосов
/ 28 марта 2009

Вы можете имитировать поведение Firefox с помощью следующего:

<input type="file" name="test" onkeypress="this.click();return false;">

Когда пользователь пытается ввести введенный файл, он открывает окно выбора файлов.

Очевидно, что это не сработает, если на клиенте отключен JavaScript, но в зависимости от ваших требований он может быть "достаточно хорошим".

Кажется, работает нормально в IE 6, 7 и 8.

В Firefox 3 все работает нормально (поскольку не позволяет набирать <input type=file>).

В Safari для Windows 3 и 4 все работает нормально (поскольку не позволяет набирать <input type=file>).

В Opera 9 (которая позволяет набирать <input type=file>) он ничего не делает (не выскакивает и не глотает нажатия клавиш). Событие onkeypress, похоже, вообще не срабатывает, вероятно, для безопасности.

В Firefox 2 он не работает (что позволяет набирать <input type=file>), потому что this.click() не выскакивает в меню выбора и return false глотает нажатия клавиш.

...