2014-12-12 1 views
-1

У меня есть две кнопки (сохранить, опубликовать), определенные в моей форме. Если я нажимаю «Сохранить», а затем «публиковать», кнопка публикации не работает. Проблема здесь в том, что функция сохранения работает нормально, как ожидалось. Но когда вы нажимаете «публиковать», то получается, что он пытается получить форму и, скорее, validate форму, которая определяется под функцией «publish», она переходит к функции проверки функции «save» и дальнейшему процессу. Мне хотелось бы знать, почему это пропускает это и переходит к процедуре проверки функции «сохранить»?

Образец кода;

Форма:

<form class="form-horizontal" method="POST" id="manage_form"> 
    <div class="form-actions" id="saveButtons"> 
     <button class="btn btn-primary" id="save"/>save</button> 
     <% if (outputs.isPermitted) { %> 
      <a class="btn btn-info" id="publish">Publish</a> 
     <% } %> 
    </div> 
</form> 

Jquery

// cache var to eliminate unnecessary re-querying 

вар $ manageForm = $ ('# manage_form');

$('#save').click(function (e) { 
    var v = $("#manage_form").validate({ 
      submitHandler: function(form) { 
      if(!validate_tiers()){ 
       return false; 

      } 
      var designer = APIDesigner(); 
      $('#swagger').val(JSON.stringify(designer.api_doc)); 
      $('#saveMessage').show(); 
      $('#saveButtons').hide(); 
      $(form).ajaxSubmit({ 
       success:function(responseText, statusText, xhr, $form) { 
      //............ 
     }); 
    $("#manage_form").submit(); 
    }); 



    $('#publish').click(function(e){ 

    alert('xxx'); 
    e.preventDefault(); 
     var v = $("#manage_form").validate({ 

      submitHandler: function(form) { 
      if(!validate_tiers()){ 
       return false; 
      } 
      var designer = APIDesigner(); 
      $('#swagger').val(JSON.stringify(designer.api_doc)); 
      $('#saveMessage').show(); 
      $('#saveButtons').hide();   
      $(form).ajaxSubmit({ 
       success:function(responseText, statusText, xhr, $form) { 
        $('#saveMessage').hide(); 
        $('#saveButtons').show();     
        if (!responseText.error) { 

         $("body").trigger("api_saved");  
        } else { 
         if (responseText.message == "timeout") { 
          if (ssoEnabled) { 
           var currentLoc = window.location.pathname; 
           if (currentLoc.indexOf(".jag") >= 0) { 
            location.href = "index.jag"; 
           } else { 
            location.href = 'site/pages/index.jag'; 
           } 
          } else { 
           jagg.showLogin(); 
          } 
         } else { 
          jagg.message({content:responseText.message,type:"error"}); 
         } 
        } 
       }, dataType: 'json' 
      }); 
      } 
     }); 
     alert('zzz'); 
     $manageForm.submit(); 
    }); 
+1

вы используете ' $ ("# manage_form"). submit(); 'в' # publish' click handle r, поэтому форма отправляется на клике '# publish'. –

+0

ваши проверки работают нормально, просто вызовите '$ (" # manage_form "). Submit();' как только проверки возвращают true –

+0

UM, не следует, чтобы строка отправки находилась внутри метода submitHandler используемого вами модуля проверки. – epascarello

ответ

1

Предотвратить default submitting из form просто использовать:

e.preventDefault(); 

Используйте разные представить обработчик для каждой кнопки, это то, что вы хотите:

$('#myform').validate({ 
    }); 
$('#submit').click(function(e) { 
    e.preventDefault(); 
    $("#myform").data("validator").settings.submitHandler = function (form) { 
                      alert('submit with submit'); 
                      //your code 
                      return false; 
                     }; 
    $('#myform').submit(); 
    return false; 
}); 
$('#publish').click(function(e) { 
    e.preventDefault(); 
    $("#myform").data("validator").settings.submitHandler = function (form) { 
                      alert('submit with publish'); 
                      //your code 
                      return false; 
                     }; 
    $('#myform').submit(); 
    return false; 
}); 

DEMO

+0

Нет не работает. такое же поведение я вижу. – Ratha

+0

Могу ли я увидеть ваш HTML-код @Ratha? Или сделать демо было бы здорово. – Manwal

+0

Да .. это форма со всеми кнопками. Я предоставил необходимые сведения о кнопке. Вам нужно больше? и функции java-скрипта, которые я использовал. Я отредактировал эти функции более подробно. И я не знаю, почему люди голосуют здесь. – Ratha

1

Предотвратить поведение формы по умолчанию для отправки.

Редактировать: не хотите ли вы представить в обработчиках отправки?

$(function() { 
// cache var to eliminate unnecessary re-querying 
var $manageForm = $('#manage_form'); 


    $('#save').click(function (e) { 
     e.preventDefault(); 
     var v = $manageForm.validate({ 
      submitHandler: function (form) { 
      $manageForm.submit(); 
      } 
     }); 
    }); 

    $('#publish').click(function (e) { 
     e.preventDefault(); 
     var v = $manageForm.validate({ 
      submitHandler: function (form) { 
       alert('yyy'); 
       $manageForm.submit(); 
      } 
     }); 
    }); 
}); 
+0

Нет, она не работает. такое же поведение я вижу. – Ratha

+0

Я тоже как и отредактированный ответ, но все же такое поведение, которое я вижу. Является ли эта проблема причиной моей $ (формы) .ajaxSubmit()? Я тоже редактировал свой код для вашей справки. вопрос. http://stackoverflow.com/questions/27424090/one-of-my-button-is-not-working-as-expected-need-to-refresh-the-page?noredirect1_comment43293455_27424090 – Ratha

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