我想停用一个形式中,为了防止双提交之后提交。非常标准的使用情况下,我会想,但所有的例子我能找到在那里是有缺陷的。

一切我可以找到基于禁用提交按钮,但是这并不妨碍被重新提交表单,如果用户点击的形式,这是一个很常见的做法上的回车键。

我正在考虑修改现有的一个脚本在那里为了解决这个问题,但在此之前我另起炉灶,做一个脚本的人已经知道了这个处理正确,他们是能够分享?我真的很惊讶,似乎没有要任何东西在那里呢。

有帮助吗?

解决方案

您可以创建一个布尔变量(或对象用布尔成员变量),并且仅提交表单当变量为假。是这样的:

function init() {
    var submit = false;
    var f = document.getElementById("FormID");
    f.onsubmit = function() {
        if(submit) {
            return false;
        } else {
            submit = true;
            return true;
        }
    }
}

当然,你将不得不调用以下页面加载init无论是在哪个味道你选择这样做(window.onload = ...window.addEventListener(...)window.attachEvent(...),等等)。

其他提示

http://jsfiddle.net/c2N4v/

var sent = false;
$('#form').submit(function(e) {
    if (!sent) {
        sent = true;
        // do whatever
    }
    else e.preventDefault();
});

我已经尝试了很多解决方案,但他们没有为我工作。我用这一个,它是工作真的罚款:

的jQuery

<script>
$(document).ready(function(){
  $('#buttonSubmit').click(function() {
    if ($('#frm-confirm').attr('submitted')){
        event.preventDefault();
    } else {
        $('#frm-confirm').attr('submitted',true);
    }
  });
});
</script>

HTML / PHP

<form id="frm-confirm" action="" method="post">
    <input id="amount" name="amount" value="<?php echo round($_POST['amount'],2); ?>" type="hidden" />
    <input id="order_id" name="order_id" value="<?php echo htmlspecialchars($_POST['order_id']);?>" type="hidden" />
    <input type="submit" id="buttonSubmit" name="confirm" value="Confirm" />
</form>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top