Итак, я все еще пытаюсь обернуть голову плагинами DIY jQuery, но одна из вещей, которые мне трудно понять, - это как сделать обратный вызов внутри функции внутри плагина. Когда я выполняю обратный вызов за пределами функции, он работает.jQuery plugback callback внутри функции
Приведенные ниже примеры были обрезаны, поэтому я не знаю, будут ли они работать, если вы попробуете их сами. Так, например
Рабочий пример:
$.fn.mvSelect = function(options){
var settings = $.extend({
selectColor: "#cccccc",
search: true,
checkbox: true,
onItemSelected: function() { },
onItemChecked: function() { }
}, options);
this.addClass("ulStyle");
this.find("li").each(function(){
$(this).addClass("itemStyle");
$(this).click(function (e) {
$("*").removeClass("itemSelected");
$(this).addClass("itemSelected");
settings.onItemSelected.call($(this)); // <-- this one works
});
});
};
Нерабочий пример:
$.fn.mvSelect = function (options) {
var settings = $.extend({
selectColor: "#cccccc",
search: true,
checkbox: true,
onItemSelected: function (e) { },
onItemChecked: function (e) { }
}, options);
function refreshData() {
that.find("li").each(function() {
$(this).addClass("itemStyle");
$(this).click(function (e) {
$("*").removeClass("itemSelected");
$(this).addClass("itemSelected");
settings.onItemSelected.call($(this)); // <-- Does not work
});
});
return that;
};
if (someThing === "refreshData")
refreshData();
};
Я предполагаю, что это что-то делать с размахом, как, когда я смотреть в scope для этого элемента настроек, он показывает закрытие пару раз в нерабочей версии, а в рабочей версии он не показывает закрытие. В любом случае, я не могу найти какую-либо информацию о том, как заставить ее работать правильно. Сами события действительно работают, их обратный вызов, который не возвращает его другому коду.