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

标签 javascript jquery

我正在使用 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/

相关文章:

javascript - 数据列表在 html 中不起作用

javascript - 展示类(class)形象 10 秒

java - 如何在 JQuery Ajax 中使用 Struts 2 token ?

javascript - wordpress:如何使用 JS 更改动态生成的 div 的 innerHTML?错误: 'cannot set property innerHTMl of null'

javascript - 首次加载页面时,JQuery 数据表不起作用

javascript - 使用 JavaScript 为所有 P 标签分配时间、日期和城市

javascript - Javascript 中的原型(prototype)概念,我做对了吗?

javascript - 在 Angularjs 中使用列表会破坏 ng-click

javascript - 使用脚本标签内的 php 变量设置 jQuery ajax url 是否合适?

javascript - anchor 不滚动到顶部