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

时间:2015-06-14 19:11:55

标签: jquery function this

对不起问题标题,我知道它的措辞不是很好,但我无法解释我在摘要中提出的要求。

我有一个与元素的click事件绑定的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)不会是初始函数的锚标记),但我对如何使其工作感到迷茫

如果我必须,或者如果有人能够解释/为什么它更好,我会坚持原有的例子!

由于

4 个答案:

答案 0 :(得分:1)

使用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();
};

答案 1 :(得分:1)

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

newfunc.call(this);

答案 2 :(得分:0)

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

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

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

function newfunc(elem){}

答案 3 :(得分:-1)

您可以将this引用传递给函数,如下所示:

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

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

$(obj)的作用与$(this)相同。