运行一次事件的一部分并多次运行其他部分

时间:2013-07-23 11:41:38

标签: jquery

$(".a").on("click",function(){
        $("b").stop(true, true).slideUp(500);
        $(this).next("c").stop(true, true).slideDown(500);
    });

我希望当用户点击“a”时,此行(第1行)只运行一次:

$("b").stop(true, true).slideUp(500);

但是这一行(第2行)无限运行:

$(this).next("c").stop(true, true).slideDown(500);

这意味着,当用户再次点击“a”时,第1行不会运行,而是第2行会运行。 怎么样?我试试这个但不行:

$(".a").on("click",function(event){
            $("b").stop(true, true).slideUp(500);
            $(this).next("c").stop(true, true).slideDown(500);
            $(this).off( event );
        });

3 个答案:

答案 0 :(得分:1)

我建议使用one()来获得更清晰的代码并更好地传达其含义。

$(".a")
   .one("click", function () { alert("Only once!"); })
   .click(function () { alert("Always!"); });

答案 1 :(得分:0)

当用户点击按钮时,您可以使用data设置标记:

$(".a").on("click",function(){
    if (!$(this).data('clicked')) {
        $("b").stop(true, true).slideUp(500);
        $(this).data('clicked', true);
    }
    $(this).next("c").stop(true, true).slideDown(500);
});

答案 2 :(得分:0)

您可以使用类标记执行

$(".a").on("click",function(){
        if(!$(this).hasClass('clickedOnce')){
           $("b").stop(true, true).slideUp(500);
           $(this).addClass('clickedOnce');
        }
        $(this).next("c").stop(true, true).slideDown(500);
    });