0

我刚刚做了我的第一个 jQuery 插件,它隐藏了太长的内容。

您可以在http://jsfiddle.net/denislexic/bT4dH/6/查看小提琴。

当您检查并单击“...”时,您会注意到第一个切换了三次,第二个切换了两次,第三个是正确的(所以只有一次)。

我不知道它为什么这样做。我试过e.preventDefault(),stopPropagation()等。似乎没有任何效果。

这是似乎是问题的代码:

 $("." + opts.clickZoneClass).on("click", function (e) {
    _debugger(1);

    var element = $(this).parent('div').children('div.status');

    // I know you can use is(':visible'), but it doesn't work in Internet Explorer 8 somehow...
    if (element.hasClass('open')) {
        _debugger(2);
        element.animate({
            height:element.attr('data-toggle')
        }, 'fast');
        //$(this).html();
        element.removeClass('open');
    } else {
        _debugger(3);
        element.animate({
            height:element.attr('data-height')
        }, 'fast');
        element.addClass('open');
    }
    return false;
});
4

2 回答 2

4

这是因为您在 $.each 循环中执行上述代码。如果您提取绑定代码并在插件运行良好后运行它。

我只是将其拉出并移至文档就绪功能以进行说明...

http://jsfiddle.net/bT4dH/10/

于 2012-08-31T16:21:10.470 回答
0

我猜当您迭代元素时,click 事件不止一次绑定。要克服这个问题,只需在点击之前添加取消绑定方法,即

$("." + opts.clickZoneClass).unbind().on("click", function (e) {
    // existing stuff
});

这将解决您的问题。

于 2012-08-31T16:24:16.690 回答