为什么$(this).data(' mycontrol')未定义?

时间:2014-05-20 14:37:18

标签: javascript jquery asp.net

不幸的是我的前端技能缺乏,因为我的角色让我更多地使用服务器端/ db技术而不是css / js。无论如何,我正试图实现这个:

https://github.com/blueimp/jQuery-File-Upload/wiki/Complete-code-example-using-blueimp-jQuery-file-upload-control-in-Asp.Net

更具体地说,我能够在这里找到一个asp.net示例:

http://www.webtrendset.com/2011/06/22/complete-code-example-for-using-blueimp-jquery-file-upload-control-in-asp-net/

基本上允许您进行大量图片上传。 我已经用正确的css和js文件设置了前端。我必须修改一些js文件以使用on()而不是live()作为live is deprecated。我的表单加载,如下所示:

enter image description here

然而,到目前为止,只要我"添加文件"或拖放文件chrome开发人员工具告诉我以下内容:

Uncaught TypeError: Cannot read property '_adjustMaxNumberOfFiles' of undefined

它将文件指定为jquery.fileupload-ui.js,更具体地指出了我:

var that = $(this).data('fileupload');
that._adjustMaxNumberOfFiles(-data.files.length);

alert编辑that当然它似乎未定义......但我不知道足够的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>

那么可能导致这种情况未定义的原因是什么?这是_adjustMaxNumberOfFiles做的事情

  _adjustMaxNumberOfFiles: function (operand) {
            if (typeof this.options.maxNumberOfFiles === 'number') {
                this.options.maxNumberOfFiles += operand;
                if (this.options.maxNumberOfFiles < 1) {
                    this._disableFileInputButton();
                } else {
                    this._enableFileInputButton();
                }
            }
        },

我使用的是jquery 2.0.3和jquery ui 1.10.3

更新

我已经明白了我发布的示例链接(上面的第二个链接)唯一的区别是他们正在使用的jquery的版本,看起来是1.8.2而我使用的是2.0。 3。差异和问题是这段代码:

var that = $(this).data('fileupload');

在示例下载中,这会返回一些奇怪的对象:

a.(anonymous function).(anonymous function) {element: e.fn.e.init[1], options: Object, _sequence: Object, _total: 0, _loaded: 0…}

在我的版本中(使用2.0.3)我对此未定义:

var that = $(this).data('fileupload');

我还有另一种方法可以执行这一行代码吗?

2 个答案:

答案 0 :(得分:5)

在控制台窗口中玩了很多次之后,我得到了它:

var that = $("#fileupload").data('blueimpUI-fileupload');

所以任何使用任何东西的人都是&gt; jQuery 1.8请更改此行:

var that = $(this).data('fileupload');

到此:

var that = $("#fileupload").data('blueimpUI-fileupload');

答案 1 :(得分:0)

你是如何初始化插件的?问题可能是您的选择器。定位表单本身,而不是包装div。

基于你的HTML ...

尝试更改:$('#fileupload').fileupload({ /*options*/ });

收件人:$('#fileupload form').fileupload({ /*options*/ });

此外,您可能还必须将.fileupload-content div移到form标记内。