2016-11-18 62 views
0

沒有改變數據我已經從參考Generic way to detect if html form is edited集標誌,如果假以形式

$.fn.extend({ 
    trackChanges: function() { 
     $(":input", this).change(function() { 
      $(this.form).data("changed", true); 
     }); 
    }, 
    isChanged: function() { 
     return this.data("changed"); 
    } 
}); 

使用的代碼,並使用它像

$("#check").click(function() { 
    $("#myform").trackChanges(); 
    if ($("#myform").isChanged()) { 
     alert("changed"); 
    } else { 
     alert("Not changed"); 
    } 
}); 

但我不知道如何捕捉到不改事件,每當我點擊按鈕時它警告改變,我也需要趕上沒有改變的事件。控制是不會到別的部分

HTML

<form id="myform"> 
    <input type="text" id="id1" /> 
    <select id="id2" ><option>1</option><option>2</option></select> 
    <textarea>asdasd</textarea> 
    <input type="button" id="check" value="button"/>   
</form> 

$.fn.extend({ 
 
    trackChanges: function() { 
 
     $(":input", this).change(function() { 
 
      $(this.form).data("changed", true); 
 
     }); 
 
    }, 
 
    isChanged: function() { 
 
     return this.data("changed"); 
 
    } 
 
});
<form id="myform"> 
 
    <input type="text" id="id1" /> 
 
    <select id="id2"><option>1</option><option>2</option></select> 
 
    <textarea>asdasd</textarea> 
 
    <input type="button" id="check" value="button" /> 
 
</form> 
 

 
<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> 
 
<script> 
 
$(document).ready(function() { 
 

 
    $("#myform").trackChanges(); 
 

 
    $("#check").click(function() { 
 

 
     if ($("#myform").isChanged()) { 
 
      alert("vam"); 
 
     } else { 
 
      alert("no"); 
 
     } 
 

 
    }); 
 
}); 
 
</script>

+0

只有在單擊按鈕時調用trackChanges方法纔沒有意義。您需要提前調用它,以便它實際上有機會在單擊按鈕之前聽取字段更改。 – CBroe

+0

我已將trackChanges放在點擊功能之外,但仍然只打電話給已更改的警報 – vamsi

回答

0

編輯

請查看這個

function check() { 
 
    $("#myform").trackChanges(); 
 
    if ($("#myform").isChanged()) { 
 
    alert("changed"); 
 
    //set flag to false again 
 
    setData(); 
 
    } else { 
 
    alert("Not changed"); 
 
    } 
 
} 
 

 
function setData() { 
 
    var f = $('#myform'), 
 
    inps = f.find(":input").not(":input[type=button]").toArray(); 
 
    f.data("changed", false); 
 
    $.each(inps, function(i, elm) { 
 
    var dval = $(this).val(); 
 
    $(elm).data("old", dval).data("temp", dval); 
 
    }) 
 
} 
 
setData(); 
 

 
//register onchange each input 
 
(function() { 
 
    $('#myform :input').change(function() { 
 
    var self = $(this); 
 
    self.data("temp", self.val()); 
 
    }) 
 
})(); 
 

 
$.fn.extend({ 
 
    trackChanges: function() { 
 
    var self = this, 
 
     inps = $(":input", self).not(":input[type=button]").toArray(); 
 

 
    inps.some(function(elm) { 
 
     var d = $(elm); 
 
     if (d.data("old") !== d.data("temp")) { 
 
     $(self).data("changed", true); 
 
     //console.log($(self)) 
 
     return true; 
 
     } 
 
     return false; 
 
    }) 
 
    }, 
 
    isChanged: function() { 
 
    return this.data("changed"); 
 
    } 
 
}); 
 

 

 
$("#check").click(check);
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 
 
<form id="myform"> 
 
    <input type="text" id="id1" /> 
 
    <select id="id2"> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    </select> 
 
    <textarea>asdasd</textarea> 
 
    <input type="button" id="check" value="button" /> 
 
</form>

+0

對於選擇框,當我將選項1更改爲2,然後將2更改爲1時,警報已更改,y? – vamsi

+0

weu,那種情況下需要對每個輸入的前一個val進行縮寫。讓我試試 – RizkiDPrast

+0

好的,請嘗試一下 – RizkiDPrast