[英]jQuery plugin returning undefined
I have a plugin to translate dom nodes. 我有一个插件来翻译dom节点。 This it what it does: 这就是它的作用:
$.fn.jqTranslate = function (pkg, options) {
var self = this;
Translate.initialize(pkg, options).done(function () {
return self.each(Translate.translate);
});
};
translate: function () {
var elem = $(this),
key = elem.data('translate');
if (Translate.translatable) {
if (Translate.translatedStrings[key]) {
if (Translate.translatedStrings[key].length === undefined) {
// The key have nested keys
Translate.translateElement(elem, Translate.translatedStrings[key].text);
delete Translate.translatedStrings[key].text;
elem.attr(Translate.translatedStrings[key]);
}
else Translate.translateElement(elem, Translate.translatedStrings[key]);
}
}
if (typeof Translate.options.onComplete === 'function') Translate.options.onComplete.apply(this, arguments);
return elem;
}
If you see, it's returning self so the plugin could be theoretically chained like this: 如果你看到,它正在返回自我,所以这个插件理论上可以像这样链接:
$('p').jqTranslate('global').addClass('translated')
Should work but it says: 应该工作,但它说:
Uncaught TypeError: Cannot call method 'addClass' of undefined 未捕获的TypeError:无法调用未定义的方法'addClass'
What am I doing wrong? 我究竟做错了什么?
You are implicitly returning undefined
from your plugin. 您隐式从插件返回undefined
。 When you have no return statement, a function returns undefined
. 如果没有return语句,则函数返回undefined
。
$.fn.jqTranslate = function (pkg, options) {
var self = this;
Translate.initialize(pkg, options).done(function () {
return self.each(Translate.translate);
});
return this; //add return statement
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.