gpt4 book ai didi

javascript - 插件由类的每个实例触发

转载 作者:行者123 更新时间:2023-12-03 11:13:44 25 4
gpt4 key购买 nike

我正在使用 jQuery 并构建了一个小插件。

jQuery(document).ready(function(){

jQuery('.section').Section();
});



jQuery.fn.Section = function(func, options){

if(typeof(func)==='undefined') func = 'new';
if(typeof(options)==='undefined') options = new Object();


//var settings = $.extend({}, options);

var DOM = jQuery(this);
var p = DOM.parent();
var collapsed = false;
var slide_area = DOM.find('.slide_area');
var toggle_btn = DOM.find('.toggle_btn');

return this.each( function() {

switch(func){

case 'new':

toggle_btn.on('click', function(){console.log('click');

if (collapsed){

slide_area.slideDown();
toggle_btn.text('-');
collapsed = false;
}else{

slide_area.slideUp();
toggle_btn.text('+');
collapsed = true;
}
});
break;
}



});
}

您可以看到,我正在使用类选择器将部分插件附加到具有“部分”类的所有 DIV。

在部分插件中,该部分中有一个切换按钮的监听器。

问题是,当我单击切换按钮时,该事件被触发 4 次。(有 4 个带有“section”类的 DIV。

我认为我已经正确设置了这个插件,因此它可以很好地与 jQuery 配合使用。我环顾四周,但找不到我做错了什么。

如何更改此设置,以便它不会为“部分”DIV 的每个实例触发一次单击功能?

下面是帮助理解结构的 HTML:

<div class="section"><!-- paypal settings -->
<h3>Paypal Settings</h3>

<div class="section_controls">
<div class="toggle_btn">-</div>
<div class="hr" style="background-color: <?php echo $settings->secondary_color; ?>;"></div>
</div>
</div>

最佳答案

您正在 this.each(...) 之外进行工作,而本应在其中内部。例如,您的台词:

var slide_area = DOM.find('.slide_area');
var toggle_btn = DOM.find('.toggle_btn');

这些位于插件的 this.each(...) 部分之外,并且您已将 DOM 设置为(有效)插件的元素集被叫去。这意味着 slide_area 引用您调用的所有部分中的所有 .slide_area 元素,并且toggle_btn 指的是调用您的所有部分中的所有 .toggle_btn 元素。稍后在 this.each(...) 中,您使用 toggle_btn.on(...) 连接一个处理程序,因此您将它连接到所有四个单独切换按钮四次。

乍一看,您在 this.each(...) 之外所做的所有事情都应该在它的内部

关于javascript - 插件由类的每个实例触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27438795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com