(function ($) {
$.fn.extend({
leanModal : function (options) {
var defaults = {
top : 100,
overlay : 0.5,
closeButton : null
};
var overlay = $("<div id='lean_overlay'></div>");
$("body").append(overlay);
options = $.extend(defaults, options);
return this.each(function () {
var o = options;
$(this).click(function (e) {
var modal_id = $(this).attr("href");
//$("#lean_overlay").click(function () {
// close_modal(modal_id)
//});
$(o.closeButton).click(function () {
close_modal(modal_id)
});
var modal_height = $(modal_id).outerHeight();
var modal_width = $(modal_id).outerWidth();
$("#lean_overlay").css({
"display" : "block",
opacity : 0
});
$("#lean_overlay").fadeTo(200, o.overlay);
$(modal_id).css({
"display" : "block",
"position" : "fixed",
"opacity" : 0,
"z-index" : 11000,
"left" : 50 + "%",
"margin-left" : - (modal_width / 2) + "px",
"top" : o.top + "px"
});
$(modal_id).fadeTo(200, 1);
e.preventDefault()
})
});
function close_modal(modal_id) {
$("#lean_overlay").fadeOut(200);
$(modal_id).css({
"display" : "none"
})
}
}
})
})(jQuery);
这是来自leanModal插件 - http://leanmodal.finelysliced.com.au/
如何在上面的插件之外调用这个close_modal()函数?我想从ajax调用的成功回调中关闭弹出对话框。 ajax调用在外部js函数内。
答案 0 :(得分:3)
只要您不介意更改供应商提供的来源(如您的初始问题中所述),以下更改应该有效(请注意,这尚未完全测试,但它应该可以帮到您那里的方式):
(function ($) {
$.fn.extend({
leanModal: function (method) {
var methods = {
init: function (options) {
return this.each(function () {
var o = options;
$(this).click(function (e) {
var modal_id = $(this).attr("href");
//$("#lean_overlay").click(function () {
// close_modal(modal_id)
//});
$(o.closeButton).click(function () {
close_modal(modal_id)
});
var modal_height = $(modal_id).outerHeight();
var modal_width = $(modal_id).outerWidth();
$("#lean_overlay").css({
"display": "block",
opacity: 0
});
$("#lean_overlay").fadeTo(200, o.overlay);
$(modal_id).css({
"display": "block",
"position": "fixed",
"opacity": 0,
"z-index": 11000,
"left": 50 + "%",
"margin-left": -(modal_width / 2) + "px",
"top": o.top + "px"
});
$(modal_id).fadeTo(200, 1);
e.preventDefault()
})
});
},
close: function (modal_id) {
close_modal(modal_id);
}
};
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.leanModal');
}
var defaults = {
top: 100,
overlay: 0.5,
closeButton: null
};
var overlay = $("<div id='lean_overlay'></div>");
$("body").append(overlay);
options = $.extend(defaults, options);
function close_modal(modal_id) {
$("#lean_overlay").fadeOut(200);
$(modal_id).css({
"display": "none"
})
}
}
})
})(jQuery);
然后,您将能够像这样调用您的代码:
$('#foo').leanModal(); //Initialise
...
$('#foo').leanModal('close'); //Close
答案 1 :(得分:0)
这个模块构造的要点是避免发布一些变量(包括函数)。
因此,您无法访问返回对象中未引用的内容。
阅读有关此构造的this。
在您的情况下,如果您不想更改插件以在返回的对象中移动函数,那么最简单的可能就是
$("#lean_overlay").fadeOut(200);
$(modal_id).css({
"display" : "none"
})
其中modal_id是元素的href
属性。