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



很抱歉问题标题,我知道它的措辞不是很好,但我无法在摘要中真正解释我在问什么。

我有一个与元素的点击事件相关联的 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)不会是初始函数中的锚标签),但我对如何使其工作感到迷茫

如果我必须这样做,或者如果有人可以解释/为什么更好,我会坚持使用有效的原始示例!

谢谢

使用

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() 或 .apply() 传递另一个this

newfunc.call(this);

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

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

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

function newfunc(elem){}

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

$("a").on("click", function() {
     foo(this);
});
function foo(obj) {
     if ($(obj).hasClass("next")) {
         // ...
     }
}

然后$(obj)的工作方式与$(this)相同。

最新更新