Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
作为jQuery Ajax请求的一部分提交禁用输入的最佳方式是什么?_Jquery - Fatal编程技术网

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

作为jQuery Ajax请求的一部分提交禁用输入的最佳方式是什么?,jquery,Jquery,我有一个非常复杂的表单,它在用户输入数据时为用户提供实时验证和反馈。表单的某些部分可能由于输入的表单业务逻辑而被禁用,但是服务器端需要知道这些禁用输入的值,以便在Ajax请求中执行一些检查 我使用jQuery序列化整个表单,$form.serialize,并在Ajax请求期间将所有这些数据发送到服务器,但这些序列化数据将丢失任何禁用的输入。那么,在每个Ajax请求中包含所有表单数据甚至禁用输入的最佳方式是什么呢 我目前的想法是将一个函数附加到ajaxStart回调,该回调将创建所有表单输入的di

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

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


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

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

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

      });
   });
测试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>

如果您的服务器接受JSON,您可以使用jQuery use jQuery select语句创建一个JSON对象,以包含必要的输入标记,然后将其作为对象发送到服务器-详细信息如下:

基本上,这样做:

var formInputs = { };

$('input[type=text]').each(function() {
  formInputs[this.id] = this.value;
});
<input type="text" readOnly="readOnly" />

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

请记住,要为您禁用的标记使用不同的虚拟id,以避免任何冲突

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

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

var formInputs = { };

$('input[type=text]').each(function() {
  formInputs[this.id] = this.value;
});
<input type="text" readOnly="readOnly" />
readonly属性指定输入字段应为只读。 无法修改只读字段。但是,用户可以对其添加选项卡、高亮显示并从中复制文本

发件人:


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

要使用.serilize将禁用的值发送到后端,请通过使用jQuery提交到Ajax的表单进行序列化,具体如下:

<HTML>
    <HEAD>
        <script>
            $(document).ready(function(){
                $("#submid").click(function() { // loginForm is submitted
                    $('#ayyappa').removeAttr('disabled');
                    $.ajax({
                        url: "urls",
                        data:{
                            "sel_opt": $("#ayyappa").attr("value"),
                        }

                    }); // Ajax
                    $("#Number").attr("disabled", "disabled");
                }); // Click
            });
        </script>
    </HEAD>

    <BODY>
        <input type='text' id="ayyappa"  name='ayyappa' value="ayyappa" disabled>
    </BODY>
</HTML>

隐马尔可夫模型。。。是否必须将其标记为禁用?将它们设置为只读根本不起作用?我认为只读属性在选择列表上不起作用。@Channele这个问题是在2009年提出的,另一个是在2011年提出的,这是怎么回事?@mido我试着选择一个更好的答案,我想如果没有其他字段,然后禁用thisform=form+'&'+this.id+'='+$this.val;将以&arg=val&arg2=val2&…的形式为您提供字符串,这不是很好。如果表单不是空的,您应该首先检查它。@gruszczy-这一点很好。如果表单序列化后,表单为空,则可以添加form=&dummy=nothing。但这是一种非常罕见的情况,因此我将保留代码示例的原样。如果值包含&,则此操作似乎会失败。请使用escape函数处理带&'s:…+'='+逃避$this.val;这在真正的输入标签上似乎可以,但在选择列表上却不行。