Уникальная идентификация общего ввода HTML для каждого запроса загрузки файла

0

В моем интерфейсе используется плагин jimery для загрузки файлов blueimps.

У меня есть форма для загрузки файлов, где вы можете выбрать несколько файлов. Эта форма имеет общие поля ввода, разделяемые между всеми файлами. Структура обрабатывает размещение каждого файла по отдельности с помощью общих входов.

У меня теперь есть требование, когда у меня есть вход, который является конкретным для каждого файла как часть формы. Как я могу динамически отправлять правильный ввод на загрузку файла?

Сценарий:

У меня есть дублированный тип ввода с именем "comment". (Комментарий к файлу) Этот вход существует для каждого файла. По умолчанию, поскольку входной файл имеет одно и то же имя для каждого файла, он привязывается на стороне сервера к моему объекту модели как разделительная строка. Я мог бы привязываться к приращениям этого поля (например, comment1, comment2, comment3), но это не чистое решение.

На стороне клиента, как я могу опубликовать правильный ввод комментариев к файлам?

Спасибо, Шейн.

Теги:
forms
file-upload
blueimp

1 ответ

0

ОК. Для тех, кто использует базовый плагин и нуждается в вышеуказанном требовании, вот оно.

Для каждого добавляемого файла я динамически добавляю строку таблицы с конкретными вводами файлов.

Перед моими изменениями плагин опубликовал форму со всеми входами. Входы, специфичные для файла, имеют одно и то же имя и принимаются как строковый массив на стороне сервера.

То, что я сделал, чтобы изменить это, было в обратном вызове add(), я назначил контекст этой новой уникальной строке таблицы. Затем в submit, я нахожу все входные данные конкретного файла из контекста и всех входов общей формы с помощью уникального идентификатора.

Затем я сериализую оба и объединяю их вместе, прежде чем назначать обратно formData.

Пример:

Общие входы в форме:

<table id="commonFields" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td>
                <form:label   path="firstName">
                        <spring:message code="fileupload.upload.member.input.firstname.label"/>
                        <form:errors path="firstName" cssClass="error" />
                </form:label>
                <form:input path="firstName"  size="30"/>
              </td>
              <td>
                <form:label   path="lastName">
                        <spring:message code="fileupload.upload.member.input.lastname.label"/> 
                        <form:errors path="lastName" cssClass="error" />
                </form:label>
                <form:input path="lastName"  size="30"/>
              </td>
            </tr>
          </table>

Фрагмент Javascript

$('#fileuploadForm').fileupload({
    dataType: 'json',
      add: function (e, data) {
          $.each(data.files, function (index, file) {
                var rowCount = $('#fileUploadTable tr').length;
                $('#fileUploadTable tr:last').after('<tr id=' +   rowCount + ' ><td>' + file.name + '</td><td><span class="field"></span></td><td><input type="text" size="30" value=""  name=comment></td><td>' + file.size + '</td>  <td>Ready to upload</td></tr>');
                data.context = $('#' + rowCount + '');
          });
        $("#upload").click(function () {
                data.submit();
            });
    },
    submit: function (e, data) {
        //this will overwrite all the form data posted to the server
        //may need to find all inputs and selects too
        var fileSpecificFields = data.context.find(':input').serializeArray();

        var commonFieldInputs = $('#commonFields').find(':input').serializeArray();
        data.formData = $.merge(commonFieldInputs, fileSpecificFields);
    }
});

Привет, Шейн. :

  • 0
    В документации объясняется, как сделать это еще проще github.com/blueimp/jQuery-File-Upload/wiki/… (возможно, его не было, когда вы опубликовали свой вопрос)
  • 0
    Я полагаю, что этот пример для плагина пользовательского интерфейса и шаблонизатора; НЕ основной плагин.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню