ファンシーボックスのバージョンを変更して、実行関数の前に少しコードを実行します。コードを実行関数に入れることができると思いますが、私が懸念している次の元の行をなぜ実行できるのか疑問に思っています。
D.undelegate(selector, 'touchstart.fb-start click.fb-start').delegate(selector, 'touchstart.fb-start click.fb-start', run);
私は次のことをしたいと思います:
D.undelegate(selector, 'touchstart.fb-start click.fb-start').delegate(selector, 'touchstart.fb-start click.fb-start', function(){ /*do something */ run(); });
残念ながら、このように run 関数を実行しようとすると、ロードできないというエラーが発生します。ここでのデフォルト ハンドラーと関数呼び出しの違いは何ですか? 以前の意味でのコールバックとして使用されることは理解していますが、ここでも同じではないでしょうか。または、舞台裏で実行に渡されるデフォルトのパラメーターがいくつかあります。これを渡す、つまり run(this) を試みましたが、fancybox はまだ失敗します。何か案は?
元のソースのより大きな部分:
// jQuery plugin initialization
$.fn.fancybox = function (options) {
var opts = options || {},
selector = this.selector || '';
function run() {
var group = [], relType = false, relVal = $(this).data('fancybox-group');
// Check if element has 'data-fancybox-group' attribute, if not - use 'rel'
if (typeof relVal !== 'undefined') {
relType = relVal ? 'data-fancybox-group' : false;
} else if (this.rel && this.rel !== '' && this.rel !== 'nofollow') {
relVal = this.rel;
relType = 'rel';
}
if (relType) {
group = selector.length ? $(selector).filter('[' + relType + '="' + relVal + '"]') : $('[' + relType + '="' + relVal + '"]');
}
if (group.length) {
opts.index = group.index(this);
F.open(group.get(), opts);
} else {
F.open(this, opts);
}
return false;
}
if (selector) {
D.undelegate(selector, 'touchstart.fb-start click.fb-start').delegate(selector, 'touchstart.fb-start click.fb-start', run);
} else {
$(this).unbind('click.fb-start').bind('click.fb-start', run);
}
return this;
};