如何将jQuery函数作为回调传递?

时间:2017-11-12 06:41:13

标签: jquery callback

以下是我的函数的第一部分,其中direction是一个整数,用于确定是使用.prev()还是.next()

有没有办法将prevnext作为参数direction传递?

function nextImage(direction) {
  var id = $('#current-image').attr('data-id');

  if(direction < 0) {
    var ele = $('#' + id).prev();

    if(ele.length == 0)
      ele = $('#' + id).siblings().last();
  }
  if(direction > 0) {
   var ele = $('#' + id).next();

   if(ele.length == 0)
      ele = $('#' + id).siblings().first();
  }

我觉得这可能是不可能的,我已经看了很多其他资源来尝试解决这个问题,尽管我的措辞可能阻止我找到解决方案。

2 个答案:

答案 0 :(得分:2)

  

有没有办法将prev或next作为参数方向传递?

是。函数是对象,你可以传递它们。但是,在您的情况下,您必须同时通过prev / nextfirst / last,这会开始变得有点笨拙:

function nextImage(move, pick) {
    var id = $('#current-image').attr('data-id');
    var ele = move.call($('#' + id));
    if (ele.length == 0) {
        ele = pick.call($('#' + id).siblings());
    }
}

nextImage($.fn.prev, $.fn.last);

请注意使用Function#call进行调用,以便this引用我们希望调用操作的jQuery对象。

另一种选择是传递他们的名字并使用括号表示法:

function nextImage(move, pick) {
    var id = $('#current-image').attr('data-id');
    var ele = $('#' + id)[move]();
    if (ele.length == 0) {
        ele = $('#' + id).siblings()[pick]();
    }
}

nextImage("prev", "last");

或者,您可能拥有对象中的那些并只传入一个键:

var nextImageFunctions = {
    "next": {
        move: $.fn.next,
        pick: $.fn.first
    },
    "prev": {
        move: $.fn.prev,
        pick: $.fn.last
    }
};
function nextImage(direction) {
    var functions = nextImageFunctions[direction];
    var id = $('#current-image').attr('data-id');
    var ele = functions.move.call($('#' + id));
    if (ele.length == 0) {
        ele = functions.pick.call($('#' + id).siblings());
    }
}

nextImage("prev");

答案 1 :(得分:-1)

喜欢这个吗?

function nextImage(direction, callBack) {
    if (direction > 0) {
        // do stuff
    } else {
        // do other fun stuff
    }

    if (callBack) callBack()
}

用法

// No callback
nextImage(direction);

// Callback
nextImage(direction, $('#div-to-change').html('Next image was run'));