是否可以在从另一个函数调用的函数中使用 $(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);
抱歉问题标题,我知道它的措辞不太好,但我无法在摘要中真正解释我要问的内容。
我有一个 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);