как контролировать несколько загрузок на счет 5

1

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

<form enctype="multipart/form-data" action="" method="post">
<div id="filediv"><input name="file[]" type="file" id="file"/></div><br/>
<input type="button" id="add_more" class="upload" value="Add More Files"/>
<input type="submit" value="Upload File" name="submit" id="upload" class="upload"/>
</form>

и код js для кнопки добавления

$('#add_more').click(function() {
$(this).before($("<div/>", {id: 'filediv'}).fadeIn('slow').append(
$("<input/>", {name: 'file[]', type: 'file', id: 'file'}),        
$("<br/><br/>")
));
});

как я могу остановить добавить больше кнопки может быть доступно всего за пять.

  • 0
    Вы создаете до 5 элементов div с одним и тем же id не является допустимым HTML и может вызвать проблему в JQuery. Вам нужно изменить id class а затем его законно. Конечно, вам также нужно изменить свой CSS
  • 0
    var count = 1; $ ('# add_more'). click (function () {if (count> = 5) {$ (this) .before ($ ("<div />", {id: 'filediv'}). fadeIn (' slow '). append ($ ("<input />", {name:' file [] ', тип:' file ', id:' file '}), $ ("<br/> <br/>" )));} else {alert ("Невозможно добавить больше 5")} count ++;});
Показать ещё 4 комментария
Теги:
upload

3 ответа

1

Перед добавлением ввода проверьте, есть ли 5 в div с id filediv. Так что да, остановитесь с возвращением.

Я изменил и упростил ваш код, поэтому поля ввода будут добавлены и подсчитаны в одном div (div # filediv).

$('#add_more').click(function() {
   if ($('div#filediv').find('input[type="file"]').length >= 5)
      return;
   $('div#filediv').append(
      $('<input/>', {name: 'file[]', type: 'file', id: 'mustBeUniquePerPage'})
   );
});

Убедитесь, что вы используете уникальный идентификатор на странице!

Более эффективное решение, меньшее количество DOM и интенсивность памяти:

var totalFilesAdded = 0;
$('#add_more').on('click', function() {
   if (totalFilesAdded >= 5)
      return;
   $('div#filediv').append(
      $('<input/>', {name: 'file[]', type: 'file', id: 'mustBeUniquePerPage'})
   );
   totalFilesAdded++;
});

Подробнее читайте здесь, почему лучше использовать.on('click') vs.click(): Разница между.on('click') vs.click()

  • 0
    За исключением того, что вы должны иметь только что-то на HTML-странице с определенным множественным id с одинаковым id это может вызвать проблему JQuery
  • 0
    @RiggsFolly Это дополнение к div, не так ли?
Показать ещё 1 комментарий
1

Наиболее важным здесь является то, что вы можете реально ограничить количество загрузок файлов на сервере. Никакие Javascript или HTML никогда не позволят пользователям загружать более 5 файлов. Вам необходимо установить лимиты на сервере.

Директива max_file_uploads PHP.ini позволяет вам ограничить количество файлов, отправленных с помощью запроса POST на загрузку файлов PHP. Даже это ограничит количество загружаемых файлов в одном запросе POST. Вам также необходимо отслеживать в вашей базе данных/файловой системе, сколько из них уже было загружено, и проверить эти ограничения не нарушены.

Атрибут имени, который вы указали на свой элемент input (file[]), подразумевает использование множественного средства загрузки, но ваш HTML не имеет multiple атрибута. Вы можете либо загрузить несколько файлов, в которых пользователи могут одновременно загрузить все 5 изображений, либо продолжать делать это как есть, и проверить, сколько полей input было создано (я не буду отправлять код для этого, как уже сказал другой ответ),

В любом случае, пожалуйста, помните, что вам все равно нужно проверить, сколько файлов уже загружено, поскольку все в HTML и Javascript можно обойти.

1

Вы можете использовать глобальную переменную в качестве счетчика и инициализировать ее до 0. На шаге приращение счетчика. Перед добавлением какого-либо свойства просто проверьте, меньше ли счетчик.

var counter = 0;
$('#add_more').click(function() {
counter = counter+1;
if(counter<=5){
$(this).before(...)
}
)};

Ещё вопросы

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