Jquery从另一个函数调用时返回空对象

时间:2018-01-19 08:04:18

标签: javascript jquery

我有一个正常的功能,当我控制台登录时,它返回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 {} 我做错了什么?

3 个答案:

答案 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();,它就会丢失。