2015-10-22 6 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. Любой uneclared аргумент, который вы передадите, будет доступен как часть псевдодаля 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 объект или проверить, если 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/

Также может быть лучше разделить логику привязки на более мелкие функции, чтобы функция была более чистой.

+0

вы можете видеть ниже, как я вызываю функцию. onclick = "deletePrompt (« Вы уверены, что хотите удалить пользователя? », deleteUser)»> onClick = "deletePrompt (« Вы уверены, что хотите удалить приглашение? », deleteInvitation, deleteInvitation ('$ {приглашение.invitationId } ',' $ {invite.clientActivationCode} ')) " –

+0

жаль, что не работает. Я использую, как показано ниже. Для меня callback возвращает false $ ("# deleteModelWindow"). On ('click', "#deleteConfirm", function() { if (callback! == undefined) { callback (параметр1, параметр2); } else {\t \t \t \t обратного вызова(); \t \t \t \t } $ .modal.close();} ); –

+0

onclick только это call удалениеInvitation способ. –

Смежные вопросы