2015-06-14 113 views
0

对不起,问题标题,我知道它措辞不是很好,但我不能真正解释我在总结中要求的内容。

我有一个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)不会从最初的功能定位标记),但我对如何使其工作

如果丢失我必须,或者如果任何人都可以解释/为什么更好,我会坚持原来的例子!

感谢

+0

我认为它应该工作!这似乎对我来说很合逻辑 – 2015-06-14 19:14:07

回答

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(); 
}; 
+0

不太确定这个答案是否与其他人建议使用'newfunc(this)'而不是'newfunc($(this))'相同,但这是我累了的方式,为我工作。谢谢 –

+1

它不完全一样......'this'指的是一个DOM项,而'$(this)'指的是一个jQuery对象。既然你总是使用'$(this)'(而不是''this''),我认为最好传递一个jquery对象作为参数,而不是在每次需要使用时将DOM元素转换为jquery对象它。 –

-1

您可以在this引用传递到像这样的功能:

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

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

$(obj)随后的工作方式相同$(this)

0

您可以通过“这个”作为一个变量其他功能:

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

,然后赶上“这个”通过在新功能的放慢参数:

function newfunc(elem){} 
相关问题