我正在使用Hammer.js库:http://hammerjs.github.io/并使用其jQuery插件。像“ panright panleft press”这样的发明很少出现,您可以调用它。我正在尝试调用cardSwipe(..)函数,但是收到一条consol错误,指出cardSwipe未定义。我不知道是什么原因造成的。

/* Initiate HammerJS on elements */
        initHammer : function()
        {
            /* Create Hammer object for swipable game cards */
            Game.$gameCard = $('.game-card-mobile');
            Game.$gameCardTouch = Game.$gameCard.hammer();

            Game.$gameCardTouch.on("panleft panright press", cardSwipe(ev, $(this), data));
        },

        cardSwipe : function(ev, element, data) {
            console.log(ev.type);
            console.log(element);
            console.log(data);
        }


编辑:添加Game.cardSwipe解决了该问题,但是现在我得到一个错误:ev未定义,其中ev是Hammer.js事件,应该被识别(如果我将函数交换为function(ev){..} )

最佳答案

这是因为cardSwipe在该上下文中实际上是未定义的,它是父对象的一部分,并且可以通过this.cardSwipe访问

initHammer : function() {
    Game.$gameCard = $('.game-card-mobile');
    Game.$gameCardTouch = Game.$gameCard.hammer();

    Game.$gameCardTouch.on("panleft panright press", this.cardSwipe(ev, $(this), data));
},
cardSwipe : function(ev, element, data) {
    console.log(ev.type);
    console.log(element);
    console.log(data);
}


看起来您正在立即调用它,而不是引用它,通常您会将其转换为这样的内容

Game.$gameCardTouch.on("events", this.cardSwipe);


或者如果您需要参数,请使用匿名函数

initHammer : function() {

    var self = this;

    Game.$gameCardTouch.on("panleft panright press", function() {
        self.cardSwipe(ev, $(self), data);
    });
},
cardSwipe : function(ev, element, data) {

}


但是我不知道cardSwipe真正返回什么,这应该如何工作?

关于javascript - 现有功能未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29322453/

10-09 18:14