Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery插件-公共方法-数据仅针对一个元素_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

Javascript jQuery插件-公共方法-数据仅针对一个元素

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

我正在尝试编写一个插件,它将选择多个元素,然后对它们应用一些私有方法,请参见下面的代码。然后,我还想让用户能够使用.activate函数手动触发插件方法的激活

这是我的密码:

标记: JS: 基本上,当我选择多个项目,然后尝试使用手动激活时,如下所示:

$(".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,我可以单独触发它们。这就是我想要的:不确定这是最优雅的解决方案,但它必须做到!非常感谢。