0

我有插件,它具有您输入元素的哪一侧的返回方向(例如:顶部,左侧..)。问题是 - 插件内部的一个函数在超时后执行,所以当我调用插件时 - 显然它返回我未定义。

;(function($){
  jQuery.fn.myplugin = function(options){

    var somefunction = function(){
        setTimeout(function(elem, e){
            return elem * e; // some action, no matter
        }, 500)              // the important thing - it's executed after plugin returned undefined
    }

    return someFunction;

  };
})(jQuery);

是否可以在不使用回调函数的情况下解决此问题,或者在这种情况下有必要?

我想用户插件喜欢

var direction = $('elem').myplugin();

但是有了回调,这应该是

$('elem').myplugin({
    callback: function(direction){
        // so i got direction here
    }
})

看起来不再那么漂亮了

4

2 回答 2

2

您的函数是异步的,因此您的代码不知道函数何时完成,并且不能等到函数执行结束。因此,不可能等待代码完成并返回结果。

为避免需要回调函数,您必须避免使用异步代码(避免 setTimeout)。否则,您将需要一个回调函数

于 2013-03-18T22:53:54.210 回答
2

您无法使用回调函数,这是setTimeout一般异步编程的本质。这是一件好事,如果它看起来不“漂亮”,请不要被吓倒。

但是为了美观,不需要在插件调用内部定义回调:

// "driver" code
$('elem').myplugin({
  callback: myApplicationCallback //or desired name
});

// your application logic code
function myApplicationCallback(direction) {
  // do work
}

干净的!

于 2013-03-18T22:56:07.567 回答