jQuery 文件上传插件 - 开始/取消按钮和进度条不起作用
Posted
技术标签:
【中文标题】jQuery 文件上传插件 - 开始/取消按钮和进度条不起作用【英文标题】:jQuery file upload plugin - Start/Cancel button and Progress bar do not work 【发布时间】:2014-02-09 13:18:17 【问题描述】:在文档事件就绪时,问题是:
TypeError: this.element.find(...).find(...).each(...).end(...).find(...).button(...) .end(...).find(...).button(...).end(...).find(...).button(...).end(...)。 find(...).progressbar 不是函数
jquery.fileupload-jquery-ui.js 的第 114 行。
当我尝试输入一些东西时,我在控制台中有这样的东西:
TypeError: $this.find(...).find(...).progressbar 不是函数
jquery.fileupload-jquery-ui.js 的第 45 行
TypeError: node.find(...).empty(...).progressbar 不是函数
jquery.fileupload-jquery-ui.js第60行
我评论该行不包括 jquery.fileupload-jquery-ui.js。上传文件使用选项 autoUpload:true 可以正常工作。如果 autoUpload 为 false,则不显示开始/取消按钮和进度条。
提示?
这些是我的图书馆:
http://blueimp.github.io/javascript-Load-Image/js/load-image.min.js http://blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js js/vendor/jquery.ui.widget.js js/jquery.iframe-transport.js js/jquery.fileupload.js js/jquery.fileupload-process.js js/libraries/jfu/js/jquery.fileupload-image.js js/libraries/jfu/js/jquery.fileupload-audio.js js/libraries/jfu/js/jquery.fileupload-video.js js/libraries/jfu/js/jquery.fileupload-validate.js js/libraries/jfu/js/jquery.fileupload-jquery-ui.js js/main.js js/libraries/jfu/css/style.css js/libraries/jfu/css/jquery.fileupload-ui.css -当然是 jquery-1.8.2.min.js 和 bootstrap.min.js。
这是代码:
<div class="row">
<div class="col-2"></div>
<div class="col-8">
<h3 style="text-align: center;">Upload your 3D model (.3ds, .stl, .obj)</h3>
<div id="fileupload">
<!-- 3D rendering antaning files -->
<div id="fileupload-render">
<div style="text-align: center;" class="fileupload-buttonbar">
<label class="fileinput-button">
<span class="btn btn-primary">Add files...</span>
<form enctype="multipart/form-data">
<input type="file" accept="object/*" name="files[]" multiple>
</form>
</label>
</div>
<table role="presentation" class="table item">
<tbody id="render-files" class="files"></tbody>
</table>
</div>
<!-- i files-->
<div id="fileupload-image">
<h3 style="text-align:center;">Upload your image (.png, .jpeg, .gif)</h3>
<div style="text-align: center;" class="fileupload-buttonbar">
<label class="fileinput-button">
<span class="btn btn-primary">Add files...</span>
<form enctype="multipart/form-data">
<input type="file" accept="image/*" name="files2[]" multiple>
</form>
</label>
<span class="fileupload-process"></span>
</div>
<table role="presentation" class="table item">
<tbody id="image-files" class="files"></tbody>
</table>
</div>
<!-- Multimedia files -->
<div id="fileupload-multimedia">
<h3 style="text-align:center;">Upload your video files (.avi, .mp4, .mpeg)</h3>
<div style="text-align: center;" class="fileupload-buttonbar">
<label class="fileinput-button">
<span class="btn btn-primary">Add files...</span>
<form enctype="multipart/form-data">
<input type="file" accept="video/*" name="files3[]" multiple>
</form>
</label>
</div>
<table role="presentation" class="table item">
<tbody id="multimedia-files" class="files"></tbody>
</table>
</div>
<!-- The global progress state -->
<div class="col-lg-5 fileupload-progress fade">
<!-- The global progress bar -->
<div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar progress-bar-success" style="width:0%;"></div>
</div>
<!-- The extended global progress state -->
<div class="progress-extended"> </div>
</div>
</div>
<div style="text-align: center;">
<a class="btn btn-success" href="<?=$this->redirect?>"><?=$this->translate("Concludi")?></a>
</div>
</div>
</div>
<script>
/*jslint unparam: true, regexp: true */
/*global window, $ */
$(function ()
'use strict';
// Change this to the location of your server-side upload handler:
var url = "/item/upload-file/";
var uploadButton = $('<button/>')
.addClass('btn btn-primary')
.prop('disabled', true)
.text('Processing...')
.on('click', function ()
var $this = $(this),
data = $this.data();
$this
.off('click')
.text('Abort')
.on('click', function ()
$this.remove();
data.abort();
);
data.submit().always(function ()
$this.remove();
);
);
$('#fileupload').fileupload(
url: url,
dataType: 'json',
autoUpload: true,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png|avi|stl|obj|3ds|mpeg)$/i,
// maxFileSize: 50000000, // 5 MB
previewMaxWidth: 100,
previewMaxHeight: 100,
previewCrop: true,
)
.on('fileuploadadd', function (e, data)
//console.log("trigger: " + $(this).attr('id'));
console.log(data.files);
data.context = $('#files');
//console.log(data.context);
$.each(data.files, function (index, file)
var htmlcheck = $('<tr class="cover_box"></tr><tr style="background-color: #E9E9E9; border: 1px solid #CCC;" class="template-upload"><td style="width: 120px" class="preview"></td><td class="name vertical-aligned"></td><td class="size vertical-aligned"></td><td class="upload-ok vertical-aligned"></td></tr>');
htmlcheck.find('.name').text(file.name);
htmlcheck.find('.size').text(file.size + ' kB');
htmlcheck.find('.preview').text(file.preview);
var html = $('<tr style="background-color: #E9E9E9; border: 1px solid #CCC;" class="template-upload"><td style="width: 120px" class="preview"></td><td class="name vertical-aligned"></td><td class="size vertical-aligned"></td><td class="upload-ok vertical-aligned"></td></tr>');
html.find('.name').text(file.name);
html.find('.size').text(file.size + ' kB');
html.find('.preview').text(file.preview);
if (file.type == 'image/png' || file.type == 'image/gif' || file.type == 'image/jpeg' || file.type == 'image/jpg')
data.context = $('#image-files');
htmlcheck.appendTo(data.context);
else if (file.type == 'video/x-msvideo' || file.type == 'video/mp4' || file.type == 'video/mpeg')
data.context = $('#multimedia-files');
htmlcheck.appendTo(data.context);
// #TODO: find the right file.type for render-files
else if (file.type == 'image/3ds' || file.type == 'image/stl' || file.type == 'image/obj')
data.context = $('#render-files');
html.appendTo(data.context);
else
alert("Gianni, metti il formato giusto!")
);
).on('fileuploadprocessalways', function (e, data)
var node = '';
var index = data.index,
file = data.files[index];
if (file.type == 'image/png' || file.type == 'image/gif' || file.type == 'image/jpeg' || file.type == 'image/jpg')
node = $("#image-files tr:last td:first");
else if (file.type == 'video/x-msvideo' || file.type == 'video/mp4' || file.type == 'video/mpeg')
node = $("#multimedia-files tr:last td:first");
//console.log(node);
if (file.preview)
node.prepend(file.preview);
if (file.error)
node.prepend(file.error);
).on('fileuploadprogressall', function (e, data)
var progress = parseInt(data.loaded / data.total * 100, 10);
console.log(data);
$('#progress .progress-bar').css('width', progress + '%');
$('#percentage').html(progress + '%');
).on('fileuploaddone', function (e, data)
$.each(data.result.files, function (index, file)
var link = $('<a>')
.attr('target', '_blank')
.prop('href', file.url);
alert(file.type);
$("#files tr:last td:first canvas").wrap(link);
$('.upload-ok').html('Uploaded');
);
).on('fileuploadfail', function (e, data)
$.each(data.result.files, function (index, file)
var error = $('<span/>').text(file.error);
$(data.context.children()[index])
.append(error);
);
).prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');
);
</script>
<!-- The template to display files available for upload -->
<script id="template-upload" type="text/x-tmpl">
% for (var i=0, file; file=o.files[i]; i++) %
<tr class="template-upload fade">
<td>
<label><input type="checkbox" name="delete" value="1" class="unique">marck as cover</label>
</td>
<td>
<span class="preview"></span>
</td>
<td>
<p class="name">%=file.name%</p>
<strong class="error text-danger"></strong>
</td>
<td>
<p class="size">Processing...</p>
<div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="progress-bar progress-bar-success" style="width:0%;"></div></div>
</td>
<td>
% if (!i && !o.options.autoUpload) %
<button class="btn btn-primary start" disabled>
<i class="glyphicon glyphicon-upload"></i>
<span>Start</span>
</button>
% %
% if (!i) %
<button class="btn btn-warning cancel">
<i class="glyphicon glyphicon-ban-circle"></i>
<span>Cancel</span>
</button>
% %
</td>
</tr>
% %
</script>
<script>
$('input.unique').click(function()
$('input.unique:checked').not(this).removeAttr('checked');
);
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
% for (var i=0, file; file=o.files[i]; i++) %
<tr class="template-download fade">
<td>
<span class="preview">
% if (file.thumbnailUrl) %
<a href="%=file.url%" title="%=file.name%" download="%=file.name%" data-gallery><img src="%=file.thumbnailUrl%"></a>
% %
</span>
</td>
<td>
<p class="name">
% if (file.url) %
<a href="%=file.url%" title="%=file.name%" download="%=file.name%" %=file.thumbnailUrl?'data-gallery':''%>%=file.name%</a>
% else %
<span>%=file.name%</span>
% %
</p>
% if (file.error) %
<div><span class="label label-danger">Error</span> %=file.error%</div>
% %
</td>
<td>
<span class="size">%=o.formatFileSize(file.size)%</span>
</td>
<td>
% if (file.deleteUrl) %
<button class="btn btn-danger delete" data-type="%=file.deleteType%" data-url="%=file.deleteUrl%"% if (file.deleteWithCredentials) % data-xhr-fields='"withCredentials":true'% %>
<i class="glyphicon glyphicon-trash"></i>
<span>Delete</span>
</button>
<input type="checkbox" name="delete" value="1" class="toggle">
% else %
<button class="btn btn-warning cancel">
<i class="glyphicon glyphicon-ban-circle"></i>
<span>Cancel</span>
</button>
% %
</td>
</tr>
% %
</script>
感谢您的帮助。
【问题讨论】:
我没有看到任何提供progressbar
插件/小部件的库
【参考方案1】:
你错过了jquery.fileupload-ui.js
【讨论】:
没错,现在我明白了,但我仍然遇到同样的问题。谢谢。 我得到了答案,但我需要超过 10 个声望才能发布我的答案或等待 2014 年 1 月 20 日下午 7:29:05。【参考方案2】:显然,我的错。在我的 ItemController.php 中有一行错误:
$layoutView->headScript()->appendStylesheet('http://blueimp.github.io/JavaScript-Templates/js/tmpl.min.js');
正确的:
$layoutView->headScript()->appendFile('http://blueimp.github.io/JavaScript-Templates/js/tmpl.min.js');
并评论这一行:
js/libraries/jfu/js/jquery.fileupload-jquery-ui.js
【讨论】:
以上是关于jQuery 文件上传插件 - 开始/取消按钮和进度条不起作用的主要内容,如果未能解决你的问题,请参考以下文章