jquery做出正确的回调

时间:2014-09-03 22:19:05

标签: javascript jquery

如何在jquery插件中正确进行回调。

(function($) {

    var parameter = {
        first:'1',
        second:'2',
        call: $.noop
    };

    var something = 'yes';

    var testf = function(){

        // i neeed launch callback here;

        var something_else = something + 'no';

        alert(something_else)

    }

    $.fn.sadstory = function(options) {

        if (options && typeof options === 'object') 
        {
            $.extend(parameter, options);
        }

        testf();

        return this;

    }

})(jQuery);

我需要atccess var和owerwrite或与他做其他事情。

$('elm').sadstory({
 call: function(){
  this.something = 'no';
 }
});

并且结果将通过带有文本nono而不是yesno的警告框,现在正确地进行此回调。

2 个答案:

答案 0 :(得分:0)

我认为你可以这样做:

$.fn.sadstory = function(options,callback) {

    if (options && typeof options === 'object') 
    {
        $.extend(parameter, options);
    }

    testf();

    // example, var c is passed to callback function
    var c= "abc";
    callback(c);

    return this;

}

你可以像

一样打电话
.sadstory({..},function(c) {
 console.log(c) // logs "abc"
})

也应该作为选项的属性

答案 1 :(得分:0)

this.something不存在。唯一的something是一个变量,其范围为testf

解决方案是将对象作为参数传递给回调,并允许回调修改此对象。

(function($) {

    var parameter = {
        first:'1',
        second:'2',
        call: $.noop
    };

    var something = 'yes';

    var testf = function(){

        // Initialize the string to a default value
        var stringGenerationParams = { something: 'yes' };

        // Allow the callback to modify the string generation params
        parameter.call(stringGenerationParams);

        // At this point, stringGenerationParams.something may have been 
        // modified by the callback function
        var something_else = stringGenerationParams.something + 'no';

        alert(something_else)

    }

    $.fn.sadstory = function(options) {

        if (options && typeof options === 'object') 
        {
            $.extend(parameter, options);
        }

        testf();

        return this;

    }

})(jQuery);

现在,这将有效:

$('elm').sadstory({
       call: function(e) {
           e.something = 'no';
       }
   });