Эта строка:
else if ( typeof method === 'object' || ! method ) {
вызывает условие $.error
(в следующем предложении else
), так как вы проверяете имя метода или объект параметров и не делали 't для передачи аргумента типа function.
Я бы порекомендовал сделать параметр callback
частью вашего options
объекта:
(function($) {
var methods = {
init: function(options) {
console.dir(arguments);
// Create some defaults, extending them with any options that were provided
var settings = $.extend({
'location': 'top',
'background-color': 'blue'
}, options);
return this.each(function() {
$(this).click(function(e) {
e.stopPropagation();
var $target = $(e.target);
if (settings.callback) settings.callback($target);
});
});
},
};
$.fn.myplugin = function(method) {
// Method calling logic
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.myplugin');
}
};
})(jQuery);
Использование:
var callback = function(){alert('hey');};
$('#my-control').myplugin({'width':'600px', callback: callback});
Пример: http://jsfiddle.net/n66mU/