2013-03-19 3 views
0

В диалоговом окне JQuery у меня есть четыре поля. При нажатии на кнопку Save я должен проверить и подтвердить следующиеПроблема в диалоговом окне подтверждения JQuery внутри формы submit

  1. Validate все обязательные поля (On представить в форме с использованием validate.js и unobstrusive.js)
  2. Проверьте значение выпадающего списка, и если это частичного типа, т. е. (избыточное), показать пользователю диалоговое окно подтверждения.
  3. Если пользователь подтвердить, нажав кнопку Да, а затем закройте диалоговое окно подтверждения и вызвать Ajax

Но проблема в том, когда я подтверждаю, нажав кнопку Да в диалоговом окне подтверждения, диалоговое окно закроется, но исполнение не снижается ,

т. Е. Сериализация данных формы и вызов Ajax для вызова веб-службы.

Пожалуйста, кто-нибудь может помочь.

$(function() { 

     $('form').submit(function() { 

      $('#result').html(" "); 

      var redunt = null; 
      redunt = $(ClientCrud_StatusCodeId).find('option:selected').text(); 

      if ($(ClientCrud_StatusCodeId).find('option:selected').text() == "Redundant") { 
       $('#clientRedundantMessage2').html("Client once made redundant cannot be reactivated. Are you sure ?"); 
       $("#RedundantMessage2").dialog(
        { 
         autoOpen: false, 
         height: 170, 
         width: 420, 
         modal: true, 
         resizable: false, 
         title: "Confirmation for Redundant", 
         Content: "Fields cannot be left blank.", 
         buttons: { 
          "Yes": function() { 
           redunt = "Active"; 
           $('#RedundantMessage2').dialog('close'); 
          }, 
          "No": function() { 
           $(this).dialog("close"); 
           return false; 
          } 
         } 
        }) //.dialog("widget").draggable("option", "containment", "none"); 
       $("#RedundantMessage2").dialog("open"); 
      } 

      if ($(this).valid()) 
      { 
       debugger; 
       if (redunt == "Active") { 

        $.ajax({ 
         url: this.action, 
         type: this.method, 
         async: false, 
         cache: false, 
         data: $(this).serialize(), 
         error: function (request) { 
          $("#result").html(request.responseText); 
          // event.preventDefault(); 
         }, 
         success: function (result) { 
          if (result == "success") { 
           $.ajax({ 
            url: "/Client/ClientGrid", 
            type: 'POST', 
            data: { "page": 0 }, 
            datatype: 'json', 
            success: function (data) { 
             $('#grid').html(data); 
            }, 
            error: function() { 
             alert('Server error'); 
            } 
           }); 

           $('#myEditClientDialogContainer').dialog('close'); 
           $('#myEditClientDialogContainer').remove() 
          } 
          else { 
           clearValidationSummary(); 
           var a = '<ul><li>' + result + '</li></ul>'; 
           $('#result').html(a); 

          } 
         } 
        }); 
       } 
      } 

      $("#griderrormsg1 li").hide().filter(':lt(1)').show(); 
      return false; 
     }); 

     editallowed = true; 
    }); 

ответ

0

Я думаю, что у вас есть проблемы с последовательностью коды, когда функция $("#RedundantMessage2").dialog(......); выполнить не ждать ответ пользователя в этом случае «да» или «нет», так что ... ваш флага redunt = "Active" дона Это имеет смысл.

вариант кнопки имеет функцию, которая выполнить, когда Opcion будет выбран, так что вы должны вызвать функцию, чтобы выполнить этот пост

$(function() { 

     $('form').submit(function() { 

      $('#result').html(" "); 

      var redunt = null; 
      redunt = $(ClientCrud_StatusCodeId).find('option:selected').text(); 

      if ($(ClientCrud_StatusCodeId).find('option:selected').text() == "Redundant") { 
       $('#clientRedundantMessage2').html("Client once made redundant cannot be reactivated. Are you sure ?"); 
       $("#RedundantMessage2").dialog(
        { 
         autoOpen: false, 
         height: 170, 
         width: 420, 
         modal: true, 
         resizable: false, 
         title: "Confirmation for Redundant", 
         Content: "Fields cannot be left blank.", 
         buttons: { 
          "Yes": function() { 
           redunt = "Active"; 
           trySend(); 
           $('#RedundantMessage2').dialog('close'); 
          }, 
          "No": function() { 
           $(this).dialog("close"); 
           return false; 
          } 
         } 
        }) //.dialog("widget").draggable("option", "containment", "none"); 
       $("#RedundantMessage2").dialog("open"); 
      } 



      $("#griderrormsg1 li").hide().filter(':lt(1)').show(); 
      return false; 
     }); 

     editallowed = true; 
    }); 

другой JS функцию

function trySend(){ 

    if ($('#IdOfYourForm').valid()) 
     { 
      debugger; 
      if (redunt == "Active") { 

       $.ajax({ 
        url: this.action, 
        type: this.method, 
        async: false, 
        cache: false, 
        data: $(this).serialize(), 
        error: function (request) { 
         $("#result").html(request.responseText); 
         // event.preventDefault(); 
        }, 
        success: function (result) { 
         if (result == "success") { 
          $.ajax({ 
           url: "/Client/ClientGrid", 
           type: 'POST', 
           data: { "page": 0 }, 
           datatype: 'json', 
           success: function (data) { 
            $('#grid').html(data); 
           }, 
           error: function() { 
            alert('Server error'); 
           } 
          }); 

          $('#myEditClientDialogContainer').dialog('close'); 
          $('#myEditClientDialogContainer').remove() 
         } 
         else { 
          clearValidationSummary(); 
          var a = '<ul><li>' + result + '</li></ul>'; 
          $('#result').html(a); 

         } 
        } 
       }); 
      } 
     } 

} 
+0

Благодаря Заку. Я так старался, но не повезло. Он подходит к методу trysend, но Isvalid не работает. Поэтому я помещаю код внутри trysend в одно и то же место вызова функции. Чем выполняется валидация, но после этого он не попадает в класс контроллера, но я получаю успешный ответ и рендеринг всей страницы с сеткой в ​​самом диалоге. – VVR147493

+0

ой! так что извините, я пишу '$ (this) .valid()', но в этой точке 'this' не является формой, поэтому вы должны ссылаться на селектор типа' $ ('# IdOfYourForm'). valid() 'check it сейчас ... –

+0

Спасибо Зак. Извините за задержку в возвращении. Теперь он работает нормально. – VVR147493