2010-12-07 57 views
0

上午j確認用戶確認。jConfirm警報 - jQuery插件

我的第一個jConfirm不會停止用戶操作,而只是傳遞給下一個。

我的代碼:

$(function() { 

    $("#UpdateJobHandler").click(function() { 

     var JobHander = getJobHandler(); 
     if (JobHander.MaxInstances == 0) { 
       jConfirm('Continue?', 'Current Maximum Instances', function (ans) { 
        if (!ans) 
         return; 
       }); 
     } 

     var json = $.toJSON(JobHander); 

     $.ajax({ 
      url: '../Metadata/JobHandlerUpdate', 
      type: 'POST', 
      dataType: 'json', 
      data: json, 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 

       var message = data.Message; 
       var alertM = data.MessageType; 
       if (alertM == 'Error') { 
        $("#resultMessage").html(message); 

       } 

       if (alertM == 'Success') { 
        $("#resultMessage").empty(); 
        alert(alertM + '-' + message); 
        action = "JobHandler"; 
        controller = "MetaData"; 
        loc = "../" + controller + "/" + action; 
        window.location = loc; 
       } 

       if (alertM == "Instances") { 
        jConfirm(message, 'Instances Confirmation?', function (answer) { 
         if (!answer) 
          return; 
         else { 
          var JobHandlerNew = getJobHandler(); 
          JobHandlerNew.FinalUpdate = "Yes"; 
          var json = $.toJSON(JobHandlerNew); 
          $.ajax({ 

           url: '../Metadata/JobHandlerUpdate', 
           type: 'POST', 
           dataType: 'json', 
           data: json, 
           contentType: 'application/json; charset=utf-8', 
           success: function (data) { 

            var message = data.Message; 
            $("#resultMessage").empty(); 
            alert(alertM + '-' + message); 
            action = "JobHandler"; 
            controller = "MetaData"; 
            loc = "../" + controller + "/" + action; 
            window.location = loc; 
           } 
          }); 
         } 
        }); 
       } 
      } 
     }); 
    }); 
}); 

我在想什麼?

回答

2

不知道這是否就是全部,但這部分:

if (JobHander.MaxInstances == 0) { 
      jConfirm('Continue?', 'Current Maximum Instances', function (ans) { 
       if (!ans) 
        return; 
      }); 
    } 

可能不會做你想做的。它正在退出function(ans) { ... }函數,而您可能想要退出整個處理程序,即$("#UpdateJobHandler").click(function() { ... }。如果是這樣,你需要做類似於你在下面做的事情 - 也就是說,在返回之後把整個東西放在function(ans) { ... }之內。可能最好分成更小的功能。

編輯:東西沿着這些路線:

function afterContinue() { 
     var json = $.toJSON(JobHander); 

     $.ajax({ 
      // ... all other lines here ... 
     }); 
    } 

    if (JobHander.MaxInstances == 0) { 
      jConfirm('Continue?', 'Current Maximum Instances', function (ans) { 
       if (ans) { 
        afterContinue(); 
       } 
      }); 
    } 

你可以做類似的事情,所有的success功能。

另一個例子,你可以重寫Instances檢查這樣的:

  function afterInstances() { 
         var JobHandlerNew = getJobHandler(); 
         JobHandlerNew.FinalUpdate = "Yes"; 

         // ... and everything under else branch ... 
      } 

      if (alertM == "Instances") { 
       jConfirm(message, 'Instances Confirmation?', function (answer) { 
        if (answer) { 
         afterInstances(); 
        } 
       }); 
      } 

重要 - 重命名方法(afterContinueafterInstances,...)有一些名字,這意味着什麼有用的人在閱讀本未來。

+0

感謝icyrock,你可以通過將這些細分爲更小的函數來顯示樣本的重新分解。 – Sreedhar 2010-12-07 06:29:09