2013-03-11 39 views
0

我有一個MVC3網站,產生與安全問題的模式窗口。問題是,當Ajax調用回來,成功或錯誤和模態窗口是否關閉,所有的表單數據的父窗口的查詢字符串結束模式窗口關閉查詢字符串後形式數據

$(this).dialog('destroy'); 

$(this).dialog('destroy').remove(); 

and placing close: function() { $(this).dialog('destroy'); }, 
與零個成功的對話框實例

如何防止模態窗口傳遞窗體值到父窗口查詢字符串?

出現在模式窗口管窺

<div id="resetpanel"> 
    <form name="pwreset" id="pwreset" action="" method="post"> 
     Account Number: <input type="text" name="acctNumber" id="acctNumber" /><br /> 
     <button class="btn" name="btnNext" onclick="goResetValidate();return false;">Next</button> 
    </form> 
</div> 
<div id="challengepanel"> 
    <form name="challenge" id="challenge" style="display:none;" action="" method="post"> 
     <input type="hidden" name="setNum" id="setNum" value="" /> 
     Member Number: <input type="text" name="acctNumber2" id="acctNumber2" readonly="true" /><br /> 
     <label id="Q0"></label> 
     Answer: <input type="text" name="answer1" id="answer1" /><br /> 
     <label id="Q1"></label> 
     Answer: <input type="text" name="answer2" id="answer2" /><br /> 
     <label id="Q2"></label> 
     Answer: <input type="text" name="answer3" id="answer3" /><br /> 
     <button class="btn" name="btnNext" id="challengebutton" onclick="goResetPassword();return false;">Submit</button> 
    </form> 
</div> 

AJAX使用jQuery調用

//function that captures the account number and sends them to the service for processing   
    function goResetValidate() { 

     // check that all answers are numbers only on challenge questions 
     var ruleset = { 
        required: true, 
        digits: true 
        }; 
     $('#pwreset').validate({ 
      rules: { 
       qSet0: ruleset, 
       qSet1: ruleset, 
       qSet2: ruleset 
        } 
     }); 

     // challenge questions for password reset 
     var qSet0 = ["Please enter the numeral of the month you were born (i.e. January = 1, February = 2)", "Please enter the last 4 digits of your Social Security number (i.e. 444-55-XXXX)", "Please enter your home zip code - first five digits only (i.e. 22333)."]; 
     var qSet1 = ["Please enter the day of the month you were born (i.e. 1, 2, 3, etc.).", "Please enter the 2 middle digits of your Social Security number (i.e. 444-XX-6666).", "Please enter the last 4 digits of your home telephone number (i.e. 703-555-XXXX)."]; 
     var qSet2 = ["Please enter the first 3 digits of your Social Security number (i.e. XXX-55-6666).", "Please enter the 3 middle digits of your home telephone (i.e. 703-XXX-5555).", "Please enter your home zip code - first five digits only (i.e. 22333)."]; 
     // rand for choice of questions 
     var random = (Math.ceil(Math.random() * 3) - 1); 
     var jRequest = {}; 
     var acnum = $("#acctNumber").val(); 
     jRequest.an = acnum; 

     var jData = {}; 
     jData.request = jRequest; 

     $.ajax({ 
      cache: false, 
      type: "POST", 
      async: false, 
      url: ResetValidateUrl, 
      data: JSON.stringify(jData), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (splashObj) { 
       switch (splashObj.ResetValidateResult.RESPONSE) { 
        case "VALID": 
         var challengequestiondisplayed = splashObj.ResetValidateResult.RESPONSE; 
         var quest = "qSet" + random; 
         // remove reset form 
         $('#resetpanel').fadeOut("slow", function() { 
          $('#resetpanel').remove(); 
          $('#acctNumber2').val(acnum); 
          $('#setNum').val(random); 
         }); 
         $.each(eval(quest), function (index, item) { 
          $('#Q' + index).text("" + this + ""); 
         }); 
         $('form#challenge').fadeToggle("slow", "linear"); 
         break; 
        // bad member number    
        case "INVALID": 
         alert("We're sorry; the system did not recognize the Member Number entered. Please try again."); 
         break; 
        // no email on file  
        case "NO_EMAIL": 
         alert("This feature requires a valid email in the system. Please contact us to provide a valid email address."); 
         break; 
        // error  
        case "ERROR": 
         alert("We're sorry; the system was uanble to complete your request. We apologize for the inconvenience."); 
         break; 
        // system is in memo-post mode  
        case "MEMO_POST": 
         alert("The system is unavailable at this time. Please try your request again later."); 
         break; 
       } 
      }, 
      error: function (xhr) { 
       alert("A Password Web Service Error!"); 
       //$(this).dialog('destroy').remove(); 
      } 
     }); 
    } 

//功能捕獲賬號/ qeustins設置數量/答案,並將其發送到服務處理
函數goResetPassword(){

 var jRequest = {}; 
     jRequest.an = $("#acctNumber2").val(); 
     jRequest.setNumber = $("#setNum").val(); 
     jRequest.answer1 = $("#answer1").val(); 
     jRequest.answer2 = $("#answer2").val(); 
     jRequest.answer3 = $("#answer3").val(); 

     var jData = {}; 
     jData.request = jRequest; 

     $.ajax({ 
      cache: false, 
      type: "POST", 
      async: false, 
      url: ResetPasswordUrl, 
      data: JSON.stringify(jData), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (splashObj) { 
       switch (splashObj.ResetPasswordResult.RESPONSE) { 
        // error  
        case "ERROR": 
         alert("We're sorry; the system was uanble to complete your request. We apologize for the inconvenience."); 
         break; 
        // system is in memo-post mode  
        case "MEMO_POST": 
         alert("The system is unavailable at this time. Please try your request again later."); 
         break; 
        case "INVALID_RESPONSE": 
         alert("We're sorry; we are unable to validate your status as the NetBranch account holder based upon your answers to the security questions. Note: The information requested is based upon member data currently on file with Apple FCU. If you continue to encounter difficulties with the security questions, please contact."); 
         break; 
        case "PERM_FROZEN": 
         alert("We're sorry; For security reasons, your online account access has been disabled. We apologize for the inconvenience."); 
         break; 
        case "FROZE_NOW": 
         alert("We're sorry; we are unable to validate your status as the NetBranch account holder. For security purposes, your account has been locked. We apologize for the inconvenience. To restore access, please contact "); 
         break; 
        case "SUCCESS": 
         alert("A temporary password has been sent to the email we have on file."); 
         break; 
       } 
       return false; 
       $(this).dialog('close'); 
      }, 
      error: function (xhr) { 
       alert("Password Web Service Error!"); 
       $.dialog('close').remove; 
      } 
     }); 
    } 

模態窗口的Jquery

$(document).ready(function() { 
    $(".openDialog").live("click", function (e) { 
     e.preventDefault(); 
     $("<div></div>") 
       .addClass("dialog") 
       .attr("id", $(this).attr("data-dialog-id")) 
       .appendTo("body") 
       .dialog({ 
        title: $(this).attr("data-dialog-title"), 
        close: function() { $(this).dialog('destroy'); }, 
        modal: true, 
        width: '530px' 
       }) 
       .load(this.href); 
    }); 

    $(".close").live("click", function (e) { 
     e.preventDefault(); 
     $(this).closest(".dialog").dialog("close"); 
    }); 
}); 
+0

嘗試搞亂按鈕元素的類型屬性(按鈕,提交)。從內存中,如果不指定類型,表單中的按鈕元素在某些瀏覽器中可能會表現得異常。如果這能解決它,我會重新發佈一個答案。 – Charlino 2013-03-12 19:42:53

回答

0

聽着,我不明白你的問題,不過,我會盡量解決您的問題,

$("#my-form-div").dialog({ 
    autoOpen: true, 
    width: 600, 
    height: 600, 
    modal: true, 
    draggable:true, 
    resizable:false, 
    title: 'FORM', 
    buttons: [ 
     { 
      text: "CLOSE", 
      className: 'close-button-class', 
      click: function() { 
       // do what ever you want on the close event 
       $(this).dialog("close"); 
       location.reload(); 
      } 
     } 
    ], 
    open: function() { 
    //do whatever you want on the open event. 
    $("#my-form-div").html("<%= escape_javascript(render('form_view')) %>"); 
    } 
}); 

請有關更清楚你要。

+0

如果我不明確,我表示歉意。模態窗口以局部視圖打開,並顯示一個輸入字段,該字段需要用戶編號。點擊該模式窗口中的按鈕,使用Ajax調用在Db中檢查該數字。如果他們失敗,我提醒然後關閉模態窗口。模式窗口將數字和按鈕名稱發送到查詢字符串中的父級。我想阻止數據從父母的地址得到解決。 – Techmaniac 2013-03-12 04:15:43

+0

你可以發佈代碼嗎? – beck03076 2013-03-12 07:03:08

0

Ahhhhhh找到了。我需要在表單上放置一個POST方法來防止它被拖欠。我猜即使我剛剛關閉了對話框,表單也將自己提交爲默認的GET。