我有一个类似下面的脚本
qq.UploadHandlerForm = function(o){
this._options = {
action: '/upload',
onComplete: function(id, fileName, response){}
};
qq.extend(this._options, o);
this._inputs = {};
};
qq.UploadHandlerForm.prototype = {
add: function(fileInput){
fileInput.setAttribute('name', 'qqfile');
var id = 'qq-upload-handler-iframe' + qq.getUniqueId();
this._inputs[id] = fileInput;
// remove file input from DOM
if (fileInput.parentNode){
qq.remove(fileInput);
}
return id;
},
upload: function(id, params){
var input = this._inputs[id];
if (!input){
throw new Error('file with passed id was not added, or already uploaded or cancelled');
}
var fileName = this.getName(id);
var iframe = this._createIframe(id);
var form = this._createForm(iframe, params);
form.appendChild(input);
var self = this;
this._attachLoadEvent(iframe, function(){
self._options.onComplete(id, fileName, self._getIframeContentJSON(iframe));
delete self._inputs[id];
setTimeout(function(){
qq.remove(iframe);
}, 1);
});
form.submit();
qq.remove(form);
return id;
},
cancel: function(id){
if (id in this._inputs){
delete this._inputs[id];
}
var iframe = document.getElementById(id);
if (iframe){
iframe.setAttribute('src', 'javascript:false;');
qq.remove(iframe);
}
},
getName: function(id){
// get input value and remove path to normalize
return this._inputs[id].value.replace(/.*(\/|\\)/, "");
},
_attachLoadEvent: function(iframe, callback){
qq.attach(iframe, 'load', function(){
if (!iframe.parentNode){
return;
}
if (iframe.contentDocument &&
iframe.contentDocument.body &&
iframe.contentDocument.body.innerHTML == "false"){
return;
}
callback();
});
},
_createIframe: function(id){
var iframe = qq.toElement('<iframe src="javascript:false;" name="' + id + '" />');
iframe.setAttribute('id', id);
iframe.style.display = 'none';
document.body.appendChild(iframe);
return iframe;
},
_createForm: function(iframe, params){
var form = qq.toElement('<form method="post" enctype="multipart/form-data"></form>');
var queryString = '';
for (var key in params){
queryString += "/"+ encodeURIComponent(params[key]);
}
form.setAttribute('action', this._options.action + queryString);
form.setAttribute('target', iframe.name);
form.style.display = 'none';
document.body.appendChild(form);
return form;
}
};
我想知道“_”用于什么,以及什么是“_createIframe:function(id){}”?什么是“getName:function(id)”调用?
其次,我想在“_createForm:function(iframe,params){}”中使用getName。我该怎么做?我试过像
这样的东西 _createForm: function(id,iframe, params){var fn= this.getName(id)}
但收到错误
编辑:添加作为答案发布的信息。
当我这样做时
_createForm: function(iframe, params){
var fname = this.getName(id);
}
我收到错误“id is undefined”。然后我试试
_createForm: function(id, iframe, params){
var fname = this.getName(id);
}
我收到错误“this._input [...]。value is null或者不是对象”
答案 0 :(得分:3)
我想知道“_”用于什么,
_
只是名称中的第一个字符。
...什么是“_createIframe:function(id){}”?什么是“getName:function(id)”调用?
它们是已分配给UploadHandlerForm
类的原型对象的函数。它们将可供该类的所有实例访问。
其次,我想在“_createForm:function(iframe,params){}”中使用getName。我该怎么办?
从_createForm
内部,您可以将其称为:
this.getName('some id');
如果您收到错误,则需要告诉我们错误是什么。
答案 1 :(得分:0)
_只是变量标识符的一部分,它在技术上并不代表JS中的任何内容,但它可能对开发人员有特殊意义(例如,所有带_的变量都可以做某些特定的事情)
_createIframe:function(id){}是对象的一部分(一次性对象像这样创建{}或从JS Object类扩展)。他们使用prototype属性将一个对象扩展为另一个对象。
尝试qq.UploadHandlerForm.getName(...)
答案 2 :(得分:0)
_只是名称的一部分,但在名称的开头有一个常见的约定“这个东西是私有的;你可能不应该乱用它”。在Javascript中,内容是隐式公开的;你实际上必须跳过一些箍(浪费一些记忆)来获得真正的私有变量。有些人不会这样做,而是给私人的东西一个特殊的名字,并相信其他人不会用它来捣乱。 (无论如何,私有变量本身只是一种惯例,在大多数语言中;任何真正想要看到它们的人都可以.JJ使得它变得更加困难,但是坦率地说这很糟糕。)
答案 3 :(得分:0)
下划线字符只是标识符的一部分。在这种情况下可能用于表示成员变量/例程。
_createForm: function(iframe, params){}
..是一个名称 - 值对。 _createForm
是名称,函数定义是值。因此该函数称为_createForm
。
我建议在javascript上观看Doug Crockford的系列节目。
答案 4 :(得分:-1)
你在这里采取了错误的做法。
如果您是JavaScript的新手,您应该首先尝试阅读一些教程,而不是仅仅考虑您看到的第一部分复杂代码并尝试解决它。您需要首先了解基础知识以及它们如何组合在一起。
从这里开始: