2015-10-22 173 views
1

我有通用的功能,我需要在不同的地方使用。問題是我需要傳遞沒有參數的函數和一些帶參數的地方來回調函數。我如何處理這兩種情況。回調函數 - 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()。

任何人都可以解釋爲什麼發生這種情況?

+0

你可以通過使用「arguments」對象在回調函數中處理它吧? –

回答

0

這很好。 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>

1

您可以使用arguments對象或檢查messagecallback是不確定的:

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/

將綁定邏輯拆分爲更小的函數也可能更好,因此函數更清晰。

+0

你可以在下面看到我如何調用函數。 onclick =「deletePrompt('你確定要刪除用戶?',deleteUser)」> onClick =「deletePrompt('你確定要刪除邀請嗎?',deleteInvitation,deleteInvitation('$ {invitation.invitationId }','$ {invitation.clientActivationCode}'))「 –

+0

對不起,沒有工作。我使用如下。對我來說,回調函數返回false $(「#deleteModelWindow」)。on('click','#deleteConfirm',function(){if(callback!== undefined){callback(parameter1,parameter2); } else {\t \t \t \t回調(); \t \t \t } \t $ .modal.close(); }); –

+0

onclick只調用deleteInvitation方法。 –