Перейти вниз на вопросJQuery плагин - запуск внутренних функций с помощью обратного вызова
JQuery плагин:
$.fn.myPlugin = function(options) {
var options = $.extend({
myOption: true,
edit: function() {},
done: function() {}
}, options);
options.edit.call(this);
options.done.call(this);
//plugin guts removed to prevent over complication
return {
edit: function(obj) {
$(obj).closest('#myParent').find('#myInput').autosizeInput(); //plugin to autosize an input
},
done: function(obj) {
$(this).closest('tr').find('td').not('.not').each(function(i) {
//do some things
});
}
}
});
Имейте в виду, что это урезанная версия моего плагина.
Вызывается со страницы:
$(document).ready(function() {
var myPlugin = $('.editable').myPlugin({
edit: $(this).on('click', '.edit-td', function(e) {
e.preventDefault();
//do some page specific stuff
myPlugin.edit($(this)); //call the edit returned function
}),
done: $(this).on('click', '.done-td', function(e) {
e.preventDefault();
//do some page specific stuff
myPlugin.done($(this)); //call the done returned function
});
});
});
Это прекрасно работает по большей части, однако, то, что я действительно хочу иметь функции, вызываемые из внутри моего плагина каждый раз, когда конкретный обратный вызов инициируется - без необходимо вызвать извне плагин.
меня пытались в том числе делегированных событий в моем плагине:
$(this).on('click', '.edit-td', function(e) {
e.preventDefault();
$(this).closest('#myParent').find('#myInput').autosizeInput();
});
$(this).on('click', '.done-td', function(e) {
e.preventDefault();
$(this).closest('tr').find('td').not('.not').each(function(i) {
//do some things
});
});
Но когда .edit-td
активизирован, он распространяется и вызывает .done-td
события, если я ставлю e.stopPropagation()
в функции edit-td
(потому что он был делегирован) edit-td
прекращает стрельбу полностью.
И не делегировал метод:
$(this).find('.done-td').click(function(e, this) {});
Но я не могу разобрать возвращаемый объект (this
) к внутренней функции до того, как внутренняя функция завершена. (просто не определено или missing formal parameter
).
* Перейти к здесь
Чтобы избежать вопроса становится локализованным -
мне нужно иметь функции, вызываемые внутри моего плагин каждый раз, когда конкретная функция обратного вызова срабатывает. без вызова его использования замыканий
Что-то вроде:
if($.fn.myPlugin.callback().is('edit')) {
//fire function
}
http s: //learn.jquery.com/plugins/advanced-plugin-concepts/ – Rashi
Это было интересное чтение и на самом деле я решил свой вопрос. Пожалуйста, предоставьте это как ответ, и я соглашусь. Wibble. – Edward
Когда я прочитал вопрос, я подумал, что у вас не было идеи о обратном вызове, поэтому я прокомментировал эту ссылку. если вы получили ответ, вы можете закрыть вопрос или сохранить его для получения более точных ответов. У меня нет большой идеи о том, чего вы хотите достичь. – Rashi