2016-09-02 4 views
0

변경 사항이 저장되지 않은 시나리오를 JSP로 처리해야합니다. 하나의 JSP 폼 & 두 개의 외부 js 파일이 있습니다.submitHandler가 외부 js와 작동하지 않습니다

1) 양식 내에서 저장 버튼을 클릭하면 정상적으로 작동합니다.
2) alert.js 코드가 JSP의 일부로 인라인 스크립트 인 경우 제대로 작동합니다.
3) alert.js를 외부화하고이 js를 가져 오기의 일부로 포함하면 app.js의 submit_form() 함수에 들어갑니다. 그러나 submitHandler는 실행되지 않았습니다.

1)의 JSP 형태

I have form with inline js click event like below 

    //submit form with validation 
    $('button:submit').click(function() { 
     submit_form('#name', '#siteId', '${add}', '${view}', 'Site'); 
    }); 


    <form:form id="form" action="${save}" commandName="site" cssClass="form-horizontal" data-toggle="validator"> 
     . 
     . 
     . 
     . 
     <button type="submit" class="btn btn-primary" disabled><spring:message code="form.button.site.save"/></button> 
    </form:form> 

app.js

function submit_form(name, page_id, $add_url, $view_url, page_name) { 
    $form.validate({ 
     . 
     . 
     submitHandler: function(form) { 
      . 
      . 
      $.post($form.attr('action'), $form.serialize(), function(response) { 
      }); 
     } 
    }); 

alert.js

$(document).ready(function() { 
    //unsaved alert section 
    var unsaved = false; 

    $(document).on('change', ':input', ':select', function() { //triggers change in all input/select fields including text type 
     unsaved = true; 
    }); 

    $('a.form-done').click(function() { 
     var $this = $(this); 
     if(unsaved === true) { 
      var $modal = $('#unsaveModal'); 
      $modal.find(".modal-title").text("Unsaved Changes"); 
      $modal.find(".modal-body span").html("Changes have not been saved. Do you want to save changes?"); 
      $modal.find('.modal-footer .btn-warning').attr('href', $this.attr('href')); 
      $modal.modal('show'); 
      return false; 
     } else { 
      return; 
     } 
    }); 

    $('button:submit').click(function() { 
     unsaved = false; 
    }); 

    $('#unsaveModal .modal-footer .btn-primary').click(function() { 
     $('button:submit').prop('disabled', true); 
     $('#form').submit(); 
      $('#unsaveModal').modal('hide'); 
     }); 
    }); 
+0

'.validate()'메소드는 폼의 *** 플러그인을 초기화하는 데에만 사용되며'click' 또는'submit' 핸들러 안에두면 안됩니다. – Sparky

+0

@ Sparky : 아약스 호출을 사용하여 양식을 저장하고 동일한 양식을 유지하려고합니다. 또한 저장 버튼을 클릭 할 때만 오류 메시지를 표시해야합니다. 제 이해가 잘못되면 저를 시정하십시오. – Mohan

+0

[문서 읽기] (https://jqueryvalidation.org/validate/#submithandler) : Ajax는 submitHandler에 속해 있으며, onkeyup과 onfocusout 옵션을 모두 false로 설정하여 유효성을 강제로 제출 버튼 클릭시에만 발생합니다. – Sparky

답변

0
function submit_form(name, page_id, $add_url, $view_url, page_name) { 
    $form.validate({ 
     .... 
     submitHandler: function(form) { 
      .... 
     } 
    }); 
    .... 

.validate() 방법은 이 양식에 플러그인을 초기화하고 click 핸들러 내부에 배치해서는 안되며 결코 submit 핸들러 내부 하는 데 사용됩니다. 플러그인은 이미 click을 캡처하고 submit 이벤트를 방해하고 있습니다. submit 핸들러 안에 넣으면 플러그인 초기화가 호출되기 전에 제출이 이미 발생 했으므로 중단됩니다.

$(document).ready(function() { 

    $form.validate({ 
     .... 
     submitHandler: function(form) { 
      // ajax here 
      .... 
     } 
    }); 
    .... 
+1

이것은 훌륭합니다! 내 문제를 해결했습니다. – Mohan

+0

@ 모한, 안녕하세요. – Sparky

관련 문제