很抱歉问题标题,我知道它的措辞不是很好,但我无法在摘要中真正解释我在问什么。
我有一个与元素的点击事件相关联的 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)
相同。