2017-01-25 2 views
3

私はフォームのonsubmitを一時停止したいので、続行する前にアクションを確認するようユーザーに依頼することができました。 だからここに私のフォームです:SweetAlert with Java Servlet

function alertInfo(action) { 
document.querySelector(action).addEventListener('submit', function (e) { 
    var form = this; 
    e.preventDefault(); 
    if (action === "remove_book") { 
     swal({ 
      title: "Remove book?", 
      text: "Watch out", 
      type: "warning", 
      showCancelButton: true, 
      confirmButtonColor: "#DD6B55", 
      confirmButtonText: "Yes.", 
      cancelButtonText: "No.", 
      closeOnConfirm: false, 
      closeOnCancel: false 
     }, 
     function (isConfirm) { 
      if (isConfirm) { 
       swal({ 
        title: "Deleted.", 
        text: "Done.", 
        type: "success" 
       }, function() { 
          form.submit(); 
       }); 
      } else { 
       swal("Cancelled", "Not done.", "error"); 
      } 
     }); 
    } 
}); 
} 

しかし、いくつかの理由で、私は提出フォームにページのリロードを防ぐことができません:その後

  <form action="<%= request.getContextPath()%>/Controller" 
        method="POST" id="remove_book" 
        onsubmit="alertBookInfo('return_book')"> 
      </form> 

、私はSweetAlertを使用して、JavaScript関数を作成しました。私は間違っていますか?

PS:フォームでreturn alertInfo()を使用し、JS関数からブール値を返すことで成功しました。

+0

どこにあなたの関数は '' alertBookInfo( 'return_book')でしょうか? – Zorken17

+0

私のファイル "functions.js"に正しくリンクされています。 – pietrochico

答えて

0

なぜ、このようにフォームから関数を呼び出していない、警告が表示されますフォームを送信する前に、プロンプト可能:

HTML

<form action="<%= request.getContextPath()%>/Controller" method="GET" id="remove_book" onclick="myAlertFunction(event)"> 
    <input type="submit"> 
</form> 

JavaScriptの

function myAlertFunction(event) { 
    event.preventDefault() 
    swal({ 
     title: "Remove book?", 
     text: "Watch out", 
     type: "warning", 
     showCancelButton: true, 
     confirmButtonColor: "#DD6B55", 
     confirmButtonText: "Yes.", 
     cancelButtonText: "No.", 
     closeOnConfirm: false, 
     closeOnCancel: false 
    }, 
    function(isConfirm) { 
     if (isConfirm) { 
     swal({ 
      title: "Deleted.", 
      text: "Done.", 
      type: "success" 
     }, function() { 
      $("#remove_book").submit(); 
     }); 
     } else { 
     swal("Cancelled", "Not done.", "error"); 
     } 
    }); 
} 

そして、あなたはリロードを防ぎたい場合、あなたは常にここevent.preventDefault()

を使用することができますが例です:JSFiddel

+0

それは私がやろうとしていることです:私はすでに私の関数でevent.preventDefault()を呼び出しましたが、何らかの理由でそれはすべきではありません。 SweetAlertは使い慣れた見た目の良いインターフェースのために使いたいと思っていました。 – pietrochico

+0

@pietrochico私の更新されたコードとJSFiddleの動作を確認してください。 – Zorken17

+0

[OK]ボタンを押しても、Idがフォームを送信しない: ') – pietrochico

0

ページをリロードする必要がない場合は、AJAX呼び出しを使用できます。 submit()を使用すると、送信の仕方がわかるので、常にページがリロードされます。あなたが春を使用している場合は、JSONが生成するような方法を定義する必要があり、あなたのコントローラで

$.ajax({ 
     method: "POST", 
     url: YOUR_ACTION_URL, 
     data: $('form').serialize(), 
     success: function(data){ 
      //here you could add swal to give feedback to the user 
     } 
    }); 

、注釈が@ResponseBodyある

+0

ありがとうございます。私はAJAXを使うことができますが、私は望んでいません:HTTPRequestからのAJAXリクエストを変更すると、私のプロジェクトではあまりにも多くの変更が必要になるので、私はそれを使用できないことを望みました。 – pietrochico

+0

私はあなたが必要としていることを理解していますが、私はフォームを使用することはできません、恐れています、このポストにもここを見てくださいhttp://stackoverflow.com/questions/18169933/submit-form-without-reloading-page – cralfaro

+0

だから私

と、その機能はあなたが私に示した機能でしょうか? – pietrochico