是否可以在从另一个函数调用的函数中使用 $(this) ?

Is it possible to use $(this) in a function called from another function?

抱歉问题标题,我知道它的措辞不太好,但我无法在摘要中真正解释我要问的内容。

我有一个 JQuery 函数绑定到一个元素的点击事件。出于很可能有缺陷的原因(除了对我个人来说更有意义之外),我在这个函数中调用了另一个函数。在第二个函数中,我希望能够从第一个函数中调用 $(this),但我不确定这是否可能,或者如果可以的话该怎么做

例子

JQuery 有效的函数

$('.member-div a').on("click",function(f){
    f.preventDefault();
    var x = $(this).parent('div').attr('id').slice(-1);
    $('.member-div').hide();
    if($(this).hasClass('next')){
        var y = parseInt(x)+1;
    };
    if($(this).hasClass('back')){
        var y = parseInt(x)-1;
    };
    $('#section'+y).show();
});


我想做什么

$('.member-div a').on("click",function(f){
    f.preventDefault();
    newfunc();
});

function newfunc(){
    var x = $(this).parent('div').attr('id').slice(-1);
    $('.member-div').hide();
    if($(this).hasClass('next')){
        var y = parseInt(x)+1;
    };
    if($(this).hasClass('back')){
        var y = parseInt(x)-1;
    };
    $('#section'+y).show();
};

我想我明白为什么第二种方法不起作用($(this) 不会是初始函数的锚标记),但我不知道如何让它起作用

如果我必须这样做,或者如果有人能解释 that/why 更好,我会坚持使用原来有效的示例!

谢谢

您可以像这样将 this 引用传递给函数:

$("a").on("click", function() {
     foo(this);
});

function foo(obj) {
     if ($(obj).hasClass("next")) {
         // ...
     }
}

$(obj)$(this).

的效果相同

您可以将 'this' 作为变量传递给另一个函数:

$('.member-div a').on("click",function(f){
f.preventDefault();
newfunc(this);
});

然后通过新函数中的参数捕获 'this':

function newfunc(elem){}

使用 this 时务必小心,因为根据函数调用的上下文,您最终可能会使用意外的值。

相反,您应该考虑使用参数:

$('.member-div a').on("click",function(f){
    f.preventDefault();
    newfunc($(this));
});

function newfunc(item){
    var x = item.parent('div').attr('id').slice(-1);
    $('.member-div').hide();
    if(item.hasClass('next')){
        var y = parseInt(x)+1;
    };
    if(item.hasClass('back')){
        var y = parseInt(x)-1;
    };
    $('#section'+y).show();
};

您可以使用 .call() or .apply() 传递另一个 this:

newfunc.call(this);