обратный вызов функции проходит как переменная - PullRequest
0 голосов
/ 08 декабря 2010

пытается передать имя функции как переменную для вызова ее в функции и т. Д., Но не может понять, как ее вызвать.

Любая помощь приветствуется!

jQuery.fn.makeSlideShow = function(opts) { 

    opts = jQuery.extend({
        speed       :400,
        delay       :0,
        slideCLass  :'.slide',
        pager       :'#pager',
        next        :'.nextSlide',
        previous    :'.previousSlide',
        startSlide  :0,
        screenClick :false,
        callback:function(){return false;}
    },opts||{});

   //   callback the fullscreenImage function here?

};



$('#slideShow').makeSlideShow({
    callback : 'fullscreenImage'
});

function fullscreenImage(){
    alert('called!');
}

лучше всего, Дан.

Ответы [ 4 ]

1 голос
/ 08 декабря 2010

Вы, вероятно, должны передать идентификатор, описывающий функцию, а не строку с ее именем.Так что переключите это:

$('#slideShow').makeSlideShow({
    callback : 'fullscreenImage'
});

на это:

$('#slideShow').makeSlideShow({
    callback : fullscreenImage
});
1 голос
/ 08 декабря 2010

Вы передаете строковый литерал своему плагину. Вам необходимо сдать function reference

$('#slideShow').makeSlideShow({
    callback : fullscreenImage
});

В вашем коде плагина вам нужно вызвать эту функцию. Это можно сделать несколькими способами:

opts.callback();  // default call
opts.callback.call(scope, param1, param2, ...);  // invoke makeSlideShow with a specific context and arguments
opts.callback.apply(scope, [param1, param2, ...]); // invoke makeSlideShow with a specific context and arguments as array
0 голосов
/ 08 декабря 2010

Вы можете установить свойство callbeck следующим образом:

$('#slideShow').makeSlideShow({
    callback : fullscreenImage
});

, и затем вы можете назвать его так:

...
callback()
...
0 голосов
/ 08 декабря 2010

При передаче строки вам необходимо знать область, в которой находится функция.

window[ opts.callback ]()

или

window[ opts.callback ].call( this )

Они предполагают, что функция является глобальной.

Было бы лучше потребовать, чтобы ссылка на функцию передавалась вместо строки.

$('#slideShow').makeSlideShow({
    callback : fullscreenImage
});

function fullscreenImage(){
    alert('called!');
}

Тогда вы бы сделали:

opts.callback()

или

opts.callback.call( this )
...