簡體   English   中英

jQuery表單更改驗證不起作用

[英]jquery form change validation doesn't work

我正在使用類似代碼的計算器。 用戶將多次提交表單,並且僅當表單更改時,我才需要存儲計算結果。 即,第一次用戶單擊“計算”按鈕-將指示發送到servlet,計算結果並將結果保存在DB中。 如果用戶再次單擊“計算”按鈕而未更改表單中的任何字段,請向Servlet發送指示未進行任何表單更改的指示。

我嘗試在表單上使用.serializeArray(),但是它不起作用:每次我單擊“計算”按鈕時都沒有更改任何表單字段,它告訴我表單已更改...感謝任何輸入!

哦,由於某種原因,jsfiddle示例不會觸發計算點擊,但會在本地為我工作。 https://jsfiddle.net/oqqbhjve/4/

我的HTML:

<form id="myForm" method="POST">
   <input id="field1" name="field1" maxlength="4" type="text" />
   <br />
   <select name="field2" >
      <option value="0" selected>- Select Brand</option>
      <option value="1">Description 1</option>
      <option value="2">Description 2</option>
   </select>
   <br /><br />
   <div id="results">   
     <input id="calculate" type="button" name="calculate" value="Calculate" />
     <input id="reset" type="reset" name="reset" value="Reset" />
   </div>
</form>

我的jQuery:

$(document).ready(function() {

   var form_changed = "No";
   var form_original_data = $("#myForm").serializeArray(); 

   $('#calculate').click(function() {

   var data = $('#myForm').serializeArray();

   if ($("#myForm").serializeArray() != form_original_data) {
      form_changed = "Yes";
   }
   alert(form_changed);

   $.ajax({
      type:"POST",
      url:"myServlet",
      data:data,
      cache: false,
      success:function(html)
   {
      $("#results").hide();
      $("#results").html(html).fadeIn("slow");
   }
   });
});
});

https://jsfiddle.net/oqqbhjve/17/

$(function() {
    var $form = $('#myForm'),
        form_original_data = $form.serializeArray(),
        original_data_string = JSON.stringify(form_original_data);

    $('#calculate').on('click', function() {
        var form_current_data = $form.serializeArray(),
            current_data_string = JSON.stringify(form_current_data),
            form_changed = (current_data_string !== original_data_string);

        console.log(form_changed);

        if (form_changed) {
            original_data_string = current_data_string;

            $.ajax({
                type: "POST",
                url: "myServlet",
                data: form_current_data,
                cache: false,
                success: function(html) {
                    //$("#results").hide();
                    //$("#results").html(html).fadeIn("slow");
                }
            });
        }
    });
});

以上僅在表單更改時提交。 因此,如果提交您的后端,則可以假設form_changed為true。

它還會更新original_data_string,以便在提交后成為新的基線。

我的建議是檢查輸入字段更改事件:

 $(function () { var form_changed = "No"; var form_original_data = $("#myForm").serializeArray(); $("form :input").change(function() { form_changed = "Yes"; }); $("#reset").click(function(e) { form_changed = "No"; }); $('#calculate').click(function() { var data = $('#myForm').serializeArray(); $('#alert').text(form_changed); $.ajax({ type:"POST", url:"myServlet", data:data, cache: false, success:function(html) { $("#results").hide(); $("#results").html(html).fadeIn("slow"); } }); }); }); 
 <script src="http://code.jquery.com/jquery-1.11.3.js"></script> <form id="myForm" method="POST"> <input id="field1" name="field1" maxlength="4" type="text" /> <br /> <select name="field2" > <option value="0" selected>- Select Brand</option> <option value="1">Description 1</option> <option value="2">Description 2</option> </select> <br /><br /> <div id="results"> <input id="calculate" type="button" name="calculate" value="Calculate" /> <input id="reset" type="reset" name="reset" value="Reset" /> </div> </form> <p id="alert"></p> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM