我有一个正常的功能,当我控制台登录时,它返回jQuery.fn.init [small.expand,context:small.expand
我的功能如下:
jQuery(document).on('click', 'h3.shipping-name small.expand', function (e) {
var me = jQuery(this);
console.log(me);
var next = me.parent().next().next();
if (next.is(":hidden")) {
me.find('i').removeClass('glyphicon-chevron-down').addClass('glyphicon-chevron-up');
} else {
me.find('i').removeClass('glyphicon-chevron-up').addClass('glyphicon-chevron-down');
}
next.slideToggle();
});
但是如果我想从另一个这样的函数中得到它:
var smallExpand = jQuery('h3.shipping-name small.expand');
smallExpand.on("click", function () {
expandDetails();
});
function expandDetails(e) {
alert("oki2");
var me = jQuery(this);
console.log(me);
var next = me.parent().next().next();
console.log(next)
if (next.is(":hidden")) {
me.find('i').removeClass('glyphicon-chevron-down').addClass('glyphicon-chevron-up');
} else {
me.find('i').removeClass('glyphicon-chevron-up').addClass('glyphicon-chevron-down');
}
next.slideToggle();
}
但它只返回像这样的empy对象:jQuery.fn.init {} 我做错了什么?
答案 0 :(得分:1)
您的实施问题是this
没有引用它引用window
对象的当前元素,因此代码无法正常工作
您可以使用call()
设置this
值
smallExpand.on("click", function (event) {
expandDetails.call(this, event);
});
或者,您可以将函数引用传递给attach事件处理程序
smallExpand.on("click", expandDetails);
答案 1 :(得分:0)
首先将变量设置为您的函数,然后您可以检索它以供日后使用。
var me;
然后
function first() {
me = $(this);
}
现在您可以在另一个函数中使用该变量
function thisorthat() {
$(‘.class’).val(me);
}
答案 2 :(得分:0)
您正在调用expandDetails作为静态方法。
如@Satpal所述,你应该smallExpand.on("click", expandDetails);
。
this
范围内存在 smallExpand.on("click", function() {});
,但一旦您致电expandDetails();
,它就会丢失。