【问题标题】:jquery property disabled and input value form submitjquery属性禁用和输入值表单提交
【发布时间】:2013-07-21 04:08:45
【问题描述】:

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

有什么帮助吗?

$("#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 ,但是当表单提交时它不会保留它

【问题讨论】:

  • 给我们看一些 html 和你的 jquery。
  • 用代码示例提问。
  • @KamilT 代码现在在那里
  • @canpoint 请看下面我的回答。如果将隐藏字段与当前代码结合起来,一切都会正常工作。

标签: jquery input field prop


【解决方案1】:

如果输入在表单提交时具有disabled='true' 属性,则它的值不会与表单一起提交。您可以尝试在 jQuery 中提交表单时重新启用它,例如:

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

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

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

之后,当您处理提交时,您只需忽略常规输入值并仅使用隐藏项。

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

【讨论】:

  • 我知道我可以用隐藏字段发送它,谢谢,但是没有办法在没有隐藏的情况下提交它。我没有使用 ajax 表单提交,所以在提交期间无法重新启用它
  • 您可以启用它,只需查看此答案中的第一个示例代码即可。此代码在提交表单时触发函数。它重新启用输入,然后提交过程正在进行;)
  • 不,@KamilT,即使我在提交期间启用了旧值,它仍然会提交旧值
  • 我在提交过程中尝试重置值,它也没有按照您的建议运行
  • 我通过将其设置为只读来解决的,感谢您的回答
【解决方案2】:

我认为问题的根源在于禁用输入字段的值未发布到服务器。 您可以从服务器端检查值是否已发布,如果未将值设置为 0。

【讨论】:

  • 是的,因为 disabled 属性会阻止发布这些值。
  • 所以你的意思是它阻止发布输入字段的新 val 还是?因为它以旧值发布,它正在被更改
  • 我的意思是禁用属性不仅会阻止用户更改值,它还会禁用在表单提交上发布组件值。例如,如果您通过提交表单检查所有已发布的数据,如果它们被禁用,您将无法检索高度和宽度。
  • 但在我禁用旧 val 时发布 - 没有取消或从发布中删除它
  • 哦,好吧,没关系,我认为数据没有更新,因为没有新的发布值。但它似乎不是问题的根源抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 2016-05-25
  • 2018-05-02
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多