Итак, я все еще пытаюсь разобраться в плагинах DIY jQuery, но одна из вещей, которые мне трудно понять, это то, как сделать обратный вызов из функции внутри плагина. Когда я делаю обратный вызов вне функции, он работает.
Приведенные ниже примеры были урезаны, поэтому я не знаю, будут ли они работать, если вы попробуете их сами. Просто для примера
Рабочий пример:
$.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();
};
Я предполагаю, что это как-то связано с областью действия, поскольку, когда я просматриваю область действия этого элемента настроек, он пару раз показывает закрытие в нерабочей версии, а в рабочей версии он не показывает закрытие. В любом случае, я не могу найти информацию о том, как заставить его работать правильно. Сами события работают, это обратный вызов, который не возвращает мой другой код.