Javascript 为什么$(this).data(';mycontrol';)未定义?
不幸的是,我的前端技能不足,因为我的角色让我更多地使用服务器端/db技术,而不是css/js。无论如何,我都在努力实现这一点: 更具体地说,我可以在这里找到一个asp.net示例: 基本上允许您进行大规模图像上传。 我已经用正确的css和js文件设置了前端。我不得不修改一些js文件,以使用Javascript 为什么$(this).data(';mycontrol';)未定义?,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,不幸的是,我的前端技能不足,因为我的角色让我更多地使用服务器端/db技术,而不是css/js。无论如何,我都在努力实现这一点: 更具体地说,我可以在这里找到一个asp.net示例: 基本上允许您进行大规模图像上传。 我已经用正确的css和js文件设置了前端。我不得不修改一些js文件,以使用on()而不是live()作为。“我的表单”将加载,如下所示: 不过,到目前为止一切都很好,只要我“添加文件”或拖放文件,chrome developer tools就会告诉我以下几点: 未捕获类型错误:
on()
而不是live()
作为。“我的表单”将加载,如下所示:
不过,到目前为止一切都很好,只要我“添加文件”或拖放文件,chrome developer tools就会告诉我以下几点:
未捕获类型错误:无法读取未定义的属性“\u adjustMaxNumberOfFiles”
它将文件指定为jquery.fileupload ui.js
,并更具体地指出:
var that = $(this).data('fileupload');
that._adjustMaxNumberOfFiles(-data.files.length);
我alert
ed这一点
当然,它似乎没有定义……但我不知道足够的jquery来理解它为什么没有定义。我的fileupload div标记如下所示:
<div id="fileupload">
<form action="/Handler.ashx" method="POST" enctype="multipart/form-data">
<div class="fileupload-buttonbar">
<label class="fileinput-button">
<span>Add files...</span>
<input id="file" type="file" name="files[]" multiple>
</label>
<button type="submit" class="start">Start upload</button>
<button type="reset" class="cancel">Cancel upload</button>
<button type="button" class="delete">Delete files</button>
</div>
</form>
<div class="fileupload-content">
<table class="files"></table>
<div class="fileupload-progressbar"></div>
</div>
</div>
我正在使用jquery 2.0.3和jquery ui 1.10.3
更新
我已经得出结论,我发布的示例链接(上面的第二个链接)唯一的区别是他们使用的jquery版本似乎是1.8.2,而我使用的是2.0.3。区别和问题在于这段代码:
var that=$(this).data('fileupload')代码>
在下载示例中,这将返回一些奇怪的对象:
a.(匿名函数)。(匿名函数){element:e.fn.e.init[1],选项:Object,\u sequence:Object,\u total:0,\u loaded:0…}
在我的版本(使用2.0.3)中,我对此未定义:
var that=$(this).data('fileupload')代码>
有没有其他方法可以在一行代码中完成此操作?您如何初始化插件?问题可能是您的选择器。针对表单本身,而不是包装div
基于你的html
尝试更改:$('#fileupload').fileupload({/*options*/})代码>
至:$('#文件上传表单')。文件上传({/*选项*/})代码>
此外,您可能还需要将.fileupload content
div移动到表单
标记中。在控制台窗口中反复播放之后,我得到了以下内容:
var that=$(“#fileupload”).data('blueinpui-fileupload')代码>
因此,对于使用anything>jQuery 1.8的任何人,请更改此行:
var that=$(this).data('fileupload')代码>
为此:
var that=$(“#fileupload”).data('blueinpui-fileupload')代码>“导致此未定义”-除非有什么东西定义了它,否则一切都是未定义的。为什么你认为应该定义它?我想我对jquery的了解还不够,不知道为什么它是未定义的。我假设$(this).data('fileupload')引用了我的上载控件,并且在其中删除了一个文件(或其中有多个文件)之后,会定义它吗?我可能离这里很远。您的结束表单标签在哪里?您可能会认为$(这)完全取决于调用它的上下文。可能是您打算:var that=$('#fileupload').data()也许这会对您有所帮助:请查看并下载此链接我所做的与此示例完全相同,唯一的区别是我有一个较新版本的jquery。我犯的错误是var that=$(this.data('fileupload'))
未定义…看起来正是我想要的。(看起来大约有8个地方需要改变。)你能解释一下为什么这样做吗?看起来这返回的结果与旧版本使用$(this.data('fileupload')
时的结果完全相同,但我不明白为什么。此外,上面的代码不会更改为$(this.data('blueinpui-fileupload')代码>?
_adjustMaxNumberOfFiles: function (operand) {
if (typeof this.options.maxNumberOfFiles === 'number') {
this.options.maxNumberOfFiles += operand;
if (this.options.maxNumberOfFiles < 1) {
this._disableFileInputButton();
} else {
this._enableFileInputButton();
}
}
},