回调函数 - javascript
我有通用的功能,我需要在不同的地方使用。问题是我需要传递没有参数的函数和一些带参数的地方来回调函数。我如何处理这两种情况。回调函数 - javascript
function deletePrompt(message, callback){
$("#deleteModelWindow").modal({
containerCss: {
width: 320,
height: 180,
overflow: 'hidden'},
onShow: function(dialog){ dialog.wrap.css('overflow','hidden'); }
});
document.getElementById("spanid").innerHTML = message;
$("#deleteModelWindow").on('click', "#deleteConfirm", function(){
if (callback !== undefined) {
callback();
} else {
callback(parameter1,parameter2);
}
$.modal.close();
});
$("#deleteModelWindow").on('click', "#cancel", function(){
$.modal.close();
});
}
调用来自:
<input id="deleteInvitationBtn" class="buOrange large" type="button" name="submit" value="Delete Invitation" onClick="deletePrompt('Are you sure you want to delete the invitation?', deleteInvitation('${invitation.invitationId}','${invitation.clientActivationCode}'))">
在这里,在的onclick它重定向到deletePrompt(之前)将其直接重定向到deleteInvitation()。
任何人都可以解释为什么发生这种情况?
这很好。 JavaScript函数非常灵活,你可以向他们传递比他们期望的更多的参数,或者更少的参数;在函数内部,任何你没有通过的声明参数的值都是undefined
。您通过的任何未声明的参数将作为arguments
伪阵列的一部分提供。
例子:
function test(label, a, b) {
var n;
snippet.log("------- " + label);
snippet.log("a = " + a);
snippet.log("c = " + b);
if (arguments.length > 3) {
snippet.log("Extra arguments:");
for (n = 3; n < arguments.length; ++n) {
snippet.log("#" + n + ": " + arguments[n]);
}
}
}
test("test1", 1, 2);
test("test2", 1);
test("test3");
test("test4", 1, 2, 3, 4);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
您可以使用arguments
对象或检查message
和callback
是不确定的:
function deletePrompt(message, callback) {
$("#deleteModelWindow").modal({
containerCss: {
width: 320,
height: 180,
overflow: 'hidden'},
onShow: function(dialog){ dialog.wrap.css('overflow','hidden'); }
});
if (message !== undefined) {
document.getElementById("spanid").innerHTML = message;
}
if (callback !== undefined) {
$("#deleteModelWindow").on('click', "#deleteConfirm", function() {
callback();
callback(parameter1,parameter2);
$.modal.close();
});
}
$("#deleteModelWindow").on('click', "#cancel", function(){
$.modal.close();
});
}
的jsfiddle展示的概念:http://jsfiddle.net/on3b7sv4/
将绑定逻辑拆分为更小的函数也可能更好,因此函数更清晰。
你可以在下面看到我如何调用函数。 onclick =“deletePrompt('你确定要删除用户?',deleteUser)”> onClick =“deletePrompt('你确定要删除邀请吗?',deleteInvitation,deleteInvitation('$ {invitation.invitationId }','$ {invitation.clientActivationCode}'))“ –
对不起,没有工作。我使用如下。对我来说,回调函数返回false $(“#deleteModelWindow”)。on('click','#deleteConfirm',function(){if(callback!== undefined){callback(parameter1,parameter2); } else {\t \t \t \t回调(); \t \t \t } \t $ .modal.close(); }); –
onclick只调用deleteInvitation方法。 –
你可以通过使用“arguments”对象在回调函数中处理它吧? –