jQuery ONE函数重新激活多次

时间:2014-04-14 04:36:13

标签: javascript jquery events onclick

我有很多<div>,每个都包含另一个按下我的按钮的div。我有一个.one('click', '.button', function(){});在每次点击时激活,并在其他地方增加一个数字。

 var barPrimC = 25;
 var barPrimN = 6;
 var barPrimS = 5;
 var barPrimT = 48;

 var barSecMajC = 11;
 var barSecMajN = 2;
 var barSecMajS = 3;
 var barSecMajT = 19;

var incSL

$('.complete, .incomplete').click(function() {

    $('.classInfo').slideUp();

    if($(this).next().is(':hidden') == true) {

        $(this).addClass('on');

        $(this).next().show('slow');

        incSL = this;

        // ADD to List
        $(".shortAdd").one('click','.button', function(){

                $(this).text('Remove from Short List');

                $(this).parent().attr("class", "shortRemove");

                $(incSL).attr("class", "incompleteSL");

                $('.classInfo').slideUp();

                barPrimS++;
                barSecMajS++;

                var updateBarP = $(".bpS").find(".b-text-right").text(barPrimS);

                var cat = $(this).data("category");
                var catBar = $("."+cat).find(".bCommonS");
                var updateBarS = catBar.filter(".bsS").find(".s-text-right").text(barSecMajS);


        });

        // REMOVE from List
        $(".shortRemove").one('click','.button', function(){

                $(this).text('Add to Short List');

                $(this).parent().attr("class", "shortAdd");

                $(incSL).attr("class", "incomplete");

                $('.classInfo').slideUp();

                barPrimS--;
                barSecMajS--;

                var updateBarP = $(".bpS").find(".b-text-right").text(barPrimS);

                var cat = $(this).data("category");
                var catBar = $("."+cat).find(".bCommonS");
                var updateBarS = catBar.filter(".bsS").find(".s-text-right").text(barSecMajS);

        });

    }

 });

我最初使用.on,但它正在激活我的两个方法(对于ADD和REMOVE点击)

如果我有:

<div>1st time div CLICKED (runs 1 time)</div>
<div>2nd time div CLICKED (runs 2 times)</div>
<div>3rd time div CLICKED (runs 3 times)</div>
<div>4th time div CLICKED (runs 4 times)</div>

所以基本上如果barPrimS从5开始,那么当add点击方法运行时它会变为6。当运行单独的add点击方法时,它会转到8.然后转到11然后转到15.

我无法弄清楚为什么会这样,请帮忙!应该只增加1(5,6,7,8)。我尝试了barPrimS = barPrimS + 1和其他方式,但他们都做了同样的事情。

1 个答案:

答案 0 :(得分:0)

我最终删除了父点击中的.shortAdd.shortRemove .on('click')方法,如建议的那样,并没有嵌套它们。然后我合并了短片,并在if/else下添加.shortAdd语句,在.toggleClass()类下添加.shortRemove,并检查它是否存在。

这解决了我的所有错误。