所以我仍然试图绕过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();
};
我认为这与范围有关,因为当我查看该设置项的范围时,它在非工作版本中显示闭包几次,而在工作版本中,它不显示闭包。无论哪种方式,我似乎无法找到有关如何使其正常工作的任何信息。事件本身确实有效,它的回调并没有让它回到我的其他代码。
答案 0 :(得分:0)
你在哪里宣布&#34;那&#34;?因为你正在使用函数(这意味着不同的范围),你需要确保&#34;这个&#34;是相同的&#34;这&#34;每次。一个innterfunction无法访问外部。你可以使用:var that = this;在函数refreshdata。然后使用&#34;那&#34;而不是&#34;这个&#34;在以下代码中。我希望你明白我的意思。