2013-07-22 46 views
3

我想问的是,我有一个名为全屏的复选框,当我检查它时,应该禁用宽度和高度这两个输入字段,并将其值设置为null 。我用j查询做得很好,但是当我用全屏检查提交表单时,即使两个输入字段的值都是0,它也会保存这两个输入字段的以前的值。jquery属性禁用和输入值表单提交

任何帮助?

$("#fullscreenCheckBox").on("change", function() { 
     if($(this).prop("checked")) { 
      $("#height").prop("disabled", true); 
      $("#height").val(""); 
      $("#width").prop("disabled", true); 
      $("#width").val(""); 

     } else { 
      $("#height").prop("disabled", false); 
      $("#height").prop("disabled", false); 
     } 
    }); 

的值设置为null的,但是当表单提交它不把它

+0

向我们展示一些html和你的jQuery的。 –

+0

用代码示例提问。 –

+0

@KamilT代码现在有 – canpoint

回答

11

如果输入在表单提交时具有disabled='true'属性,则值为isn' t提交表格。您可以尝试在形式的时刻重新启用提交jQuery中,如:

$("#yourFormId").submit(function(){ 
    $("#YourInputId").prop('disabled', 'false'); 
}); 

另一种方法是使用许多额外的隐藏字段为每一个“看得见”的输入,像<input id='hiddenInputId' type='hidden' >并设置thier值在jQuery中。他们不会被用户看到,但他们的价值仍然会通过表单提交发送。例如:

$("#yourInputId").change(function(){ 
    $("#hiddenInputId").val($(this).val())); 
}); 

之后,当您处理提交时,您只是忽略常规输入值,只能使用隐藏。

就我个人而言,我认为第二个选项(隐藏输入)要好得多。你甚至可以扩展它,而不是在change()中硬编码你的DOM元素id,你可以添加一个数据属性到每个元素,然后用一块石头杀死所有的鸟类:)

+0

我知道我可以发送隐藏的字段感谢,但没有办法提交它没有隐藏。我没有使用ajax表单提交,所以无法在提交期间重新启用它 – canpoint

+0

您可以启用它,只需查看此答案中的第一个示例代码即可。此代码在表单被引用时会触发该函数。它重新启用输入,然后提交过程正在进行;) –

+0

nope @KamilT,它仍然提交旧值,即使我在提交 – canpoint

0

我认为,问题的根源是,从禁用输入字段中的值不会发布到服务器。 您可以从服务器端执行的操作是检查值是否已过帐,如果未将值设置为0.

+0

当我删除禁用jQuery代码时,它发布得非常好:) – canpoint

+0

是的,因为disabled属性阻止发布这些值。 – nubinub

+0

所以你的意思是它可以防止发布输入字段的新val或?因为它发布的旧值正在改变 – canpoint