我正在寻找创建一个抽象的jquery对话框函数,我将参数传递给我以减少我的整体js膨胀。我的javascript目前有很多例子:
$(".claim_issue_lb").click(function (e) {
$(function () {
$("#dialog-claim").dialog({
resizable: false,
height: 240,
modal: true,
buttons: {
"Claim Issue": function () {
ProcessDealerAction("claim"); //function to be called upon success
$(this).dialog("close");
},
Cancel: function () {
$(this).dialog("close");
}
}
});
});
});
为解决这个问题,我创建了以下内容:
function LoadDialog(target, height, confirm_button, function_call) {
$(target).dialog({
resizable: false,
height: height,
modal: true,
buttons: {
confirm_button: function () {
function_call;
$(this).dialog("close");
},
Cancel: function () {
$(this).dialog("close");
}
}
});
}
希望能够将对话调用减少到以下示例:
$(".claim_issue_lb").click(function (e) {
LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction("claim"));
});
它似乎运行良好,除了弹出确认对话框然后自行运行而没有任何人单击“是这样做”或“取消”,然后对话框自动关闭。
我不确定如何解决这个问题,或者我的整个方法是否有缺陷。
答案 0 :(得分:1)
LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction("claim"));
将立即执行ProcessDealerAction
。您需要在此处传递function
,而不是其结果。
function LoadDialog(target, height, confirm_button, function_call, function_args) {
...
LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction, ["claim"]);
或
LoadDialog("#dialog-claim", 240, "Claim Issue", (new function(){ProcessDealerAction("claim"));}))
会让您更接近您需要的位置。您还需要正确调用回调。
confirm_button: function () {
function_call();
$(this).dialog("close");
},
或者如果您决定单独传递args而不需要匿名函数:
confirm_button: function () {
function_call.apply(this, [function_args]);
$(this).dialog("close");
},