将参数传递给回调函数

时间:2015-06-25 07:50:22

标签: jquery callback

我想直接将参数传递给JQuery中的函数。

我用过

$(this).prev()

访问我之前的参数。但是我想在没有prev方法的情况下随时访问此前一个参数。我目前的代码如下

$(".a").click(function(){
    $(this).next().slideToggle(1000,function(){
    $(this).prev().css("background-color","green");

    });
});

1 个答案:

答案 0 :(得分:0)

使用闭包将事件对象和元素合并到一个参数列表中:

$(".a").click(function(eve){
    (function ( e, p ) {
        $(e.target).next().slideToggle(1000,function(){
            $(p).css("background-color","green");
        });
    })( eve, $(this).prev() );
});

您可以选择不发送事件对象:

$(".a").click(function(eve){
    (function ( n, p ) {
        $(n).slideToggle(1000,function(){
            $(p).css("background-color","green");
        });
    })( $(this).next(), $(this).prev() );
});

当然,您的实际回调函数可以从事件处理程序注册中分解出来:

function myClickCallback ( n, p ) {
    $(n).slideToggle(1000,function(){
        $(p).css("background-color","green");
    });
}

//...

$(".a").click(function(eve){
    myClickCallback ( $(this).next(), $(this).prev() );
});

在一些应该在其他地方产生影响的触发动作的背景下,这可能更有意义。这种行为绝不是推荐的做法 - 用户交互的非本地效果实际上违反了UI设计建议:

function myClickCallback ( n, p ) {
    $(n).slideToggle(1000,function(){
        $(p).css("background-color","green");
    });
}

//...

$(".a").click(function(eve){
    myClickCallback ( $(some_other_element).next(), $(some_other_element).prev() );
});

<强>演示

This fiddle包含一个具有简化回调函数的想法的PoC。