【问题标题】:How to conditionally submit a form?如何有条件地提交表单?
【发布时间】:2015-09-04 16:39:51
【问题描述】:

我在我的动态 html 页面中使用以下表单和提交按钮。

<form method=\"post\" class=\"my-form\" >

<input type=\"submit\" name=\"submitButton\" value=\"Submit\" id=\"button1\" />

我要做的是当用户提供特定输入时,然后显示一个警告框,询问用户是要提交更改还是只停留在同一页面而不提交更改。

我可以显示警报框(在 stackoverflow 成员的帮助下),但连同 window.alert 我应该添加到 JavaScript 的内容,因此如果用户单击 window.confirm 上的“取消”并提交表单,则不会提交表单用户在 window.confirm 上点击“确定”?

JavaScript 示例位于 fiddle

$(document).on('input', '.my-input', function(){
    $(this).closest('form').addClass('changed');
});

$(document).on('submit', '.my-form', function(e){
    if($(this).hasClass('changed')){
     var x=window.confirm("You have set a unique threshold for one or more states below. Are you sure you want to reset them all?")
    if (x)
        window.alert("Thresholds changed!")
    else
        window.alert("Thresholds not changed!")
    } 
    $(this).removeClass('changed');
    e.preventDefault();
});

【问题讨论】:

    标签: javascript jquery html forms


    【解决方案1】:

    您只需要更改您的逻辑,以便仅在用户拒绝确认框时调用preventDefault()。试试这个:

    $(document).on('submit', '.my-form', function (e) {
        if ($(this).hasClass('changed')) {
            var allowSubmit = window.confirm("You have set a unique threshold for one or more states below. Are you sure you want to reset them all?")
            if (!allowSubmit) 
                e.preventDefault()
        }
    });
    

    Example fiddle

    如果您单击“确定”,您将看到表单已提交(并且来自 jsFiddle 的警告以使用 POST 请求 - 但这是正常的),而单击“取消”则不会执行任何操作。

    【讨论】:

    • 谢谢你,Rory,它可以按照我的要求工作。但是有一个疑问:如果我输入一个值并单击提交按钮,我会看到带有“确定”和“取消”按钮的警报窗口。如果我单击取消,则页面保持原样并且未提交表单(这是预期的)。但是,如果我再次单击提交,则表单将直接提交,而不会显示带有“确定”和“取消”按钮的警报窗口。如何确保每次单击提交时都会显示警报窗口(如果文本框中的值已更改)
    • 那是因为您需要删除 removeClass() 行 - 我为您更新了答案
    【解决方案2】:

    您也可以在提交函数处理程序中返回 false,它应该可以工作。以this question 为例。

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 2013-12-31
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多