Javascript jQuery插件-公共方法-数据仅针对一个元素
我正在尝试编写一个插件,它将选择多个元素,然后对它们应用一些私有方法,请参见下面的代码。然后,我还想让用户能够使用.activate函数手动触发插件方法的激活 这是我的密码: 标记: JS: 基本上,当我选择多个项目,然后尝试使用手动激活时,如下所示:Javascript jQuery插件-公共方法-数据仅针对一个元素,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在尝试编写一个插件,它将选择多个元素,然后对它们应用一些私有方法,请参见下面的代码。然后,我还想让用户能够使用.activate函数手动触发插件方法的激活 这是我的密码: 标记: JS: 基本上,当我选择多个项目,然后尝试使用手动激活时,如下所示: $(".pox-wrapper").imagepox({ // NOTE: selects two elements manualActivation: true }); var manual = $(".pox-wrapper").d
$(".pox-wrapper").imagepox({ // NOTE: selects two elements
manualActivation: true
});
var manual = $(".pox-wrapper").data('imagepox');
setTimeout(function(){
manual.activate();
}, 5000);
它将只对查询中的第一个元素应用activate方法
这是我的第一个jQuery插件,到目前为止,我已经能够处理所有事情,但我不确定这一个,甚至不确定它是否是有效调用公共方法的正确方法。我还尝试在插件中使用带有事件侦听器的自定义事件,但它仍然只应用页面中第一个元素上的方法
提前感谢:这不是你的插件的错。数据不是这样工作的,它不知道如何从元素集合返回数据。因为仔细想想,集合中的每个元素都包含自己的数据对象 因此,当您调用集合上的数据时,它将返回第一个集合中的数据。快速解决方案是将setTimeout的内部内容更改为集合中所有元素的循环,并对它们调用activate
setTimeout(function(){
$(".pox-wrapper").each(function(){
$(this).data('imagepox').activate();
})
}, 5000);
在我看来,您希望向jquery对象集合添加函数。这是jquery插件的用例。您可以创建一个轻量级的,如下所示:
$.fn.imagepox.activate = function(){ //do this after you create your plugin!
return this.each(function(){
var $this = $(this);
var data = $this.data('imagepox');
if(data){
data.activate();
}
});
};
现在你可以这样称呼它:
$(".pox-wrapper").imagepox.activate()
除了使用.data外,你还有其他想法吗?基本上,我希望用户能够在想要激活整个插件时触发。当然,让我再添加一个黑客想法。哦,酷!它起作用了!因此,如果我为每个元素使用特定的类或id,我可以单独触发它们。这就是我想要的:不确定这是最优雅的解决方案,但它必须做到!非常感谢。