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

Mik*_*keN 18 jquery

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

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

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

tva*_*son 23

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

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

      });
   });
Run Code Online (Sandbox Code Playgroud)

测试HTML

<form action="/action">
   <input type='text' disabled='disabled' value='hey' id='hey' name='hey' />
   <input type='text' value='ho' id='ho' name='ho' />
   <input type='text' value="hi" id='hi' name='hi' />
   <input type='button' value="Serialize" />
</form>
Run Code Online (Sandbox Code Playgroud)

产量

ho=ho&hi=hi&hey=hey
Run Code Online (Sandbox Code Playgroud)

  • 如果值包含`&`,这似乎会失败. (5认同)

Yan*_*ven 6

由于输入的形式"业务逻辑",表单的某些部分可能被禁用

您可以使用"readonly"属性来禁用这些输入字段.这样做:

<input type="text" readOnly="readOnly" />
Run Code Online (Sandbox Code Playgroud)

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

来自:HTML输入只读属性

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

  • 这似乎适用于真正的输入标签,但不适用于选择列表. (2认同)

Gab*_*rit 5

如果您的服务器接受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;
});
Run Code Online (Sandbox Code Playgroud)