Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在执行AJAX之前检查表单字段中的更改_Php_Javascript_Jquery_Ajax - Fatal编程技术网

Php 在执行AJAX之前检查表单字段中的更改

Php 在执行AJAX之前检查表单字段中的更改,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,我的查看页面上有一个表单。。每当表单在页面上填充时,它都会被旧值填充。。。我的意思是输入框和复选框有旧值。。。然后我通过ajax发布表单。在发布成功保存到数据库中的if值后,我会显示一条消息,信息更新成功,反之亦然…所以现在的问题是,例如,如果用户不更改任何内容,表单值在文本框中是相同的,当用户按下保存按钮时,我不想向他显示信息已更新,因为他没有做任何事情。。我想问,在java脚本中,这是否可能……或者我应该查询数据库并检查值是否相同?另一件事是,如果有可能的话,按钮将保持禁用状态,直到他在表单

我的查看页面上有一个表单。。每当表单在页面上填充时,它都会被旧值填充。。。我的意思是输入框和复选框有旧值。。。然后我通过ajax发布表单。在发布成功保存到数据库中的if值后,我会显示一条消息,信息更新成功,反之亦然…所以现在的问题是,例如,如果用户不更改任何内容,表单值在文本框中是相同的,当用户按下保存按钮时,我不想向他显示信息已更新,因为他没有做任何事情。。我想问,在java脚本中,这是否可能……或者我应该查询数据库并检查值是否相同?另一件事是,如果有可能的话,按钮将保持禁用状态,直到他在表单字段中做了一些更改

我写的不是全部代码,只是
javascript
部分

$("#submit").click(function(e){
    e.preventDefault();
    var name = $('#name').val();
    var email = $('#email').val();
    var password = $('#password-check').val();
    var oldpassword = $('#oldpassword').val();
    var timezone = $('#UserinfoTimezone').val();
    var alternate_email = $('#alternate_email').val();
    //var newsletter = $('#newsletter').val();

    var form_data = {
        name: $('#name').val(),
        email: $('#email').val(),
        password: $('#password-check').val(),
        oldpassword: $('#oldpassword').val(),
        timezone: $('#UserinfoTimezone').val(),
        alternate_email: $('#alternate_email').val(),
    };
    $.ajax({
        type:"POST",
        data:form_data,
        url:"https:/localhost/settings/",
        success : function(data) {
            alert("successfully data saved"):
        }
    });

您可以将旧值保存在JavaScript中,并将它们与提交处理程序中的当前值进行比较。如果没有任何更改,请不要发布
POST


是的,您还可以先禁用保存按钮,然后将
onChange
处理程序附加到表单字段,当这些字段的内容更改时,这些字段将启用保存按钮。

在ajax上,将复制输入值提交到某个属性,这样您就可以知道上次发送的数据

$('#form input').each(function() {

 $(this).data('last-ajax-value', $(this).val());

});
当调用第二个ajaxsubmit时,您可以检查这些值是否匹配并做出一些决定

var someValueDiffers = false;

$('#form input').each(function() {

 if($(this).data('last-ajax-value') != $(this).val())
  someValueDiffers = true;

});

if(someValueDiffers)
 // Form changed
else
 // Form is the same

您可以在页面加载时取消设置输入值

$(document).ready(function(){
   $("input").each(function(){
      $(this).val() = '';
   });
});

在页面加载中,您可以获取所有输入元素值,并将它们保存在单独的全局变量中。提交表单时,请将当前输入值与保存的旧输入值进行检查。如果其中任何一个不相等,则表示用户已更改表单,您可以提交该表单

var init_name = "";
var submit_flag   = false;
$(document).ready( function () {

 var init_name = $('#name').val();

 $("#submit").click(function(e){ 

     var name = $('#name').val();

     if(name == init_name) {

       // user has not changed
       submit_flag = false;
     } else {
       submit_flag = true;
     }
     if(submit_flag) {
        // call the ajax
     }
 })
})

您可以在填充表单中的字段时保存这些值。。。否则,您可以使用一个标志变量,该变量可以在每个字段的.change()函数中指定一个值,并且可以在提交表单时检查该值。。但我想第一个选项会更有效,因为即使用户编辑字段并再次输入相同的值,也会设置标志…

提交ajax值后,您需要清除输入字段值

将此代码替换为您的成功:

 ...
    success: function(data){
    alert("successfully data saved"):
     $('#myformid').find('input:text, input:password, input:file, select, textarea').val('');
      $('#myformid').find('input:radio, input:checkbox')
     .removeAttr('checked').removeAttr('selected');
    }

实现这一点的一个简单方法。取消启用提交按钮。如果在页面上进行了更改,请启用它。

this.defaultValue=this.value对我来说听起来更简单。如果设置数据属性,请使用
.data(“last ajax value”,this.value)
而不是attrIMO。更清楚的是,使用数据attr不是关于输入的默认值,而是关于最后发布的值。我认为表单会被发布多次。是的,但是defaultValue更有意义,因为如果我们没有使用ajax,我们可以在服务器上设置字段值,如果用户再次对输入字段使用相同的值,然后这个逻辑将不允许他们保存这些值。这就是OP想要的,这样用户可以输入相同的内容并再次保存