使用单个.click()激活多个函数?

时间:2013-01-03 07:08:18

标签: jquery

我觉得这个答案很简单,但我无法弄清楚甚至要搜索什么。

我想要做的是让一个.click()事件按顺序触发两个函数。 Function1清除目标区域,然后function2应该是.slideDown()。

    function function1(){
    $(this).parents('#div').siblings().nextAll('#div').hide();
    };

function function2(){
    $(this).parents('#div').siblings().nextAll('#div').slideDown(1000);
    };

$("#div").click(function1 + function2);

我尝试了以下,但无济于事......

    $("#div").click(function1, function2);
    $("#div").click(function1,function2);
    $("#div").click(function1 + function2);
    $("#div").click(function1+function2);

当function1和function2独立触发时,它们可以正常工作。只有当我试图将它们组合在一起时才会发生。

非常感谢你!

编辑: 哦,#div标记只是地标选择器。

3 个答案:

答案 0 :(得分:6)

您可以传递一个按顺序调用两个函数的处理程序。

为了正确绑定this,您必须使用call()apply()来调用它们:

$("#div").click(function() {
    function1.call(this);
    function2.call(this);
});

如果您像其他答案那样“自然地”调用这些功能,那么function1()function2() this内的window将被绑定到undefined(或{{1}在严格模式下),而不是被点击的元素,所以它们不会像你期望的那样表现。

答案 1 :(得分:0)

这对你有用 - 试试吧。

$(selectorForButton).click(
  function(e){
    function1();
    function2();
 });

答案 2 :(得分:0)

您需要使用callback,如下所示:

$(document).ready(function(){
    $('#test').click(function(){
        one();
        two();
    });
});



function one(){
    alert("I am function one");
}

function two(){
    alert("I am function two");
}

这是一个有效的JSFiddle