作为jQuery Ajax请求的一部分,提交禁用输入的最佳方法是什么?

我有一个非常复杂的表单,可以在用户输入数据时使用它提供实时validation和反馈。 由于输入的forms“业务逻辑”,表单的某些部分可能被禁用,但是服务器端需要知道这些禁用的输入的值,以便在Ajax请求中进行一些检查。

我使用jQuery来序列化整个表单,$(form).serialize(),并在我的Ajax请求期间将所有这些数据发送到服务器,但是这个序列化数据将丢失任何被禁用的输入。 那么在每个Ajax请求中包含所有表单数据(甚至禁用输入)的最佳方法是什么?

我目前的想法是将一个函数附加到ajaxStart(回调),该函数将创建所有表单输入’禁用属性的客户端哈希映射,启用所有输入,序列化,然后将每个表单的禁用属性设置回其原始值。 但这似乎过于复杂,我想要一些不那么脆弱的简单东西。

尝试做这样的事情来序列化表单:

$(function() { $('input[type=button]').click( function() { var form = $('form').serialize(); $('input[disabled]').each( function() { form = form + '&' + $(this).attr('name') + '=' + $(this).val(); }); }); }); 

测试HTML

 

产量

 ho=ho&hi=hi&hey=hey 

由于输入的forms“业务逻辑”,表单的某些部分可能被禁用

您可以使用“readonly”属性来禁用这些输入字段。 这样做:

  

readonly属性指定输入字段应该是只读的。 无法修改只读字段。 但是,用户可以选中它,突出显示它,然后从中复制文本。

来自: HTML输入只读属性

只读字段也可以作为查询字符串提交给服​​务器。

如果您的服务器接受JSON,您可以使用jQuery创建一个JSON对象(使用jQuery select语句包含必要的输入标记),然后将其作为对象发送到服务器 – 更多信息请访问: http : //encosia.com/2009 / 04/07 / using-complex-types-to-make-calling-services-less-complex / 。

基本上,做这样的事情:

 var formInputs = { }; $('input[type=text]').each(function() { formInputs[this.id] = this.value; }); 

另一个选择是简单地添加一个隐藏字段,其中包含您要发布到服务器的值。

请记住为您禁用的标记使用不同的 (虚拟)ID,以避免任何冲突。

要使用.serilize()通过使用jQuery到Ajax的表单提交将禁用值发送到后端,它是: