Я использую плагин Gravity Forms для загрузки файла.Отправка формы и обработка ошибок работает как надо.Тем не менее, я сделал некоторые изменения в форме, чтобы стилизовать ввод файла (просто добавил немного HTML, CSS, + jQuery).Следующий CSS помещает стилизованную кнопку и поле (выглядит как поле, но на самом деле это просто div), содержащийся внутри .upload-fake
, в том же горизонтальном + вертикальном пространстве, что и вход, но непрозрачность ввода установлена в 0, так что вытолько увидеть кнопку.Z-индекс ввода помещает его сверху из .upload-fake
, поэтому при нажатии на кнопку или поле запускается кнопка загрузки.
Вот небольшой скриншотsetup форма со стилевым вводом файла
Соответствующий HTML + CSS (#input_1_3
- это ввод файла):
<div class="upload-fake">
<a class="button green yanone">Choose File</a>
<div class="file-status">File</div>
</div>
#input_1_3 {
width: 100%;
height: 30px;
position: relative;
z-index: 2;
opacity: 0 !important;
filter: alpha(opacity=0) !important;
-ms-filter: "alpha(opacity=0)" !important;
-khtml-opacity: 0 !important;
-moz-opacity: 0 !important
}
.upload-fake {
position: relative;
z-index: 1;
margin-top: -30px;
clear: both
}
Кроме того, я использую следующий скриптзаписать имя файла в .file-status
.По умолчанию текст в поле «Файл».Это работает должным образом, если только нет ошибки проверки.
$('input[type=file]').live("change", function(e){
var AllowedExtension = ['jpeg', 'jpg'],
$me = $(this),
$file = $('.file-status');
value = $me.val(),
shortvalue = value.split("\\").pop(),
allowed = value.split('.').pop().toLowerCase();
$file.removeClass('error');
if ($.inArray(allowed, AllowedExtension) == -1) {
$file.text('only JPG or JPEG allowed').addClass('error');
} else {
if(shortvalue.length >= 30) {shortvalue = shortvalue.substr(0,27) + '...';}
$file.text(shortvalue);
}
});
Гравитационные формы перезагружают мой HTML в исходное состояние (не включая измененный текст из приведенного выше скрипта jQuery), поэтому текст внутри .upload-fake .file-status
получает сброс обратно к «файлу», даже если файл был выбран и записан в поле перед отправкой.
Я хотел бы сделать следующее:
- Сохранитьвходное значение файла в переменной перед отправкой
- Если есть ошибка, сбросьте значение входного файла в ту переменную, которая была установлена до отправки
Я пытался использовать$.ajaxError(function(){ ... })
, но, похоже, он даже не срабатывает, когда форма выдает ошибку.
У кого-нибудь есть опыт или идеи?!