Скажем, у меня есть это очень простой плагин:Плагин jQuery: как получить доступ к событию?
(function ($) {
"use strict";
// Namespaced methods.
var methods = {
init: function (options) {
return this.each(function() {
// Default settings.
var defaults = {
'sampleText': 'hello'
};
var $this = $(this);
var data = $this.data('me');
// Continue if the plugin hasn't been initialized yet.
if (!data) {
$this.mouseup(function() {
$this.trigger('onClick'); // events.
});
// Add control data.
$this.data('me', defaults);
$this.trigger('onLoad'); // events.
}
});
},
isPlugin: function() {
return true;
},
getData: function() {
return $(this).data('me');
}
$.fn.tester = 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.test');
}
};
})(jQuery);
И я применяю плагин & отслеживать событие щелчка, как это:
$('#poo').tester();
$('#poo').on('onClick', function (e) {
var $data = e.target.tester('isPlugin');
var dat = e.target.data('me');
});
Проблема заключается в том, внутри обработки событий я больше не могу получить доступ к плагину. Попытка получить как биты результата данных в Visual Studio рассказывал мне
JavaScript runtime error: Object doesn't support property or method 'tester'
и ...
JavaScript runtime error: Object doesn't support property or method 'data'
Доступ к плагинов данных + методы не внутри события работает просто отлично.
Спасибо, Чарли, что сделал трюк. Хотя это должно было быть просто, я пропал! –