首先,我知道这是一个基本的JS问题,而不是jQuery。我处在那个学习点,我似乎无法完全解决一些范围问题。所以我需要一些解释。
我一直在阅读我能找到的每篇文章/教程,但只需要一些答案。我设置了这个基本代码进行试验(因为实际的代码太大了,不能在这里发布)。
在下面的实验中,当单击selector1-change按钮时,'cmd'变量显示正确,但对this.options的引用是'undefined',因为它是MySelector()的不同实例,除非我我走了。
那么如何调用像这样的对象的实例呢?
示例:
您可以通过创建它来使用jQueryUI的对话框,然后您可以像$('#mydiv')那样将命令传递给它。dialog('close');这将访问附加到该元素的实例。这是如何完成的?
JQUERY_MYSELECTOR.JS
(function($){
$.fn.MySelector = function(incoming) {
if (typeof(incoming) != 'object') {
return runCommand(incoming);
}
var options = $.extend({},{
id: false,
backgroundColor: false
},incoming);
function runCommand(cmd) {
alert('blah:'+this.options.backgroundColor+"\n"+'cmd:'+cmd);
}
}
})(jQuery);
SCRIPT
<script type="text/javascript" src="jquery_myselector.js"></script>
<script type="text/javascript">
$j(document).ready(function() {
$j('#selector1).MySelector({ backgroundColor: '#000000' });
$j('#selector1-change').click(function() {
$j('#selector1').MySelector('mooocow');
});
});
</script>
风格
<input type="button" value="selector1" id="selector1" />
<br/>
<input type="button" value="selector1-change" id="selector1-change" />
更新的 忘了在selector1(duh)上使用插件
答案 0 :(得分:2)
在为选项赋值之前调用runCommand - options在runCommand主体内部具有值undefined
。不要问我JS在声明之前是如何看到runCommand的主体的,但它可以。
此外,在MySelector的第一级,this
绑定到运行$j('#selector1-change')
的结果,这是一个数组。您将需要迭代该数组。
尝试这样的事情:
(function($){ function runCommand(e, cmd) { alert('blah:'+ e.options.backgroundColor+"\n"+'cmd:'+cmd); } $.fn.MySelector = function(incoming) { this.each(function() { if (typeof(incoming) != 'object') { return runCommand(this, incoming); } else { this.options = $.extend(this.options || { id: false, backgroundColor: false },incoming); } }); } })(jQuery);
答案 1 :(得分:1)
您可以尝试这样的事情:
(function($){
$.myPlugin = {
foo: function () {...},
bar: function () {...},
foobar: function () {...}
};
$.fn.MySelector = function (operation) {
if (typeof operation === 'string') {
switch(operation) {
'open':
$.myPlugin.foo();
break;
'destroy':
$.myPlugin.bar();
break;
default:
$.myPlugin.foobar();
break;
}
}
}
}(jQuery));
答案 2 :(得分:0)
options
在您的主要范围内使用var
语句声明,您不需要在runCommand函数中使用this
关键字,因为在该函数中您可以访问到外封闭:
function runCommand(cmd) {
alert('blah:'+options.backgroundColor+"\n"+'cmd:'+cmd);
}