2013-04-25 123 views
1

我有一个非常复杂的形式,我不想让所有的数据库查询,只是因为有人进入更新页面。如何检查表单数据是否被修改?

我如何知道表单内的内容是否已被修改?

我不使用knockout.js,也不想实现它。

回答

2

您可以使用javascript。例如,一旦呈现表单,您可以计算校验和,并在提交之前重新计算校验和并比较两个值。然后,你可以设置一个隐藏字段的值,这样,当表单被提交到服务器,你会知道的东西是否被修改:

String.prototype.hashCode = function() { 
    var hash = 0; 
    if (this.length == 0) return hash; 
    for (i = 0; i < this.length; i++) { 
     char = this.charCodeAt(i); 
     hash = ((hash<<5) - hash) + char; 
     hash = hash & hash; 
    } 
    return hash; 
}; 

$(function() { 
    var $form = $('form'); 
    $form.data('checksum', $form.serialize().hashCode()) 
    $form.submit(function() { 
     var initialChecksum = $(this).data('checksum'); 
     var currentChecksum = $(this).serialize(); 
     var isDirty = initialChecksum != currentChecksum; 
     $('#isDirty').val(isDirty); 
    }); 
}); 

和您的视图模型可以有,你可以在查询一个IsDirty布尔属性处理表单提交的控制器操作。

+0

我会检查出来,谢谢。 – IamStalker 2013-04-25 07:30:10

0

也许有一些jQuery。将一些类分配给字段并激发更改事件,并将更改字段的名称放在某个隐藏字段中,然后您可以在服务器端更改字段。

<input type="hidden" id="changedNames" name ="changedNames" /> 


$(function() { 
    $('.observe').change(function (e) { 
     var thisName = $(this).attr('name'); 
     $('#changedNames').val($('#changedNames').val() + thisName + " "); 

    }); 
}); 
相关问题