【问题标题】:Prevent multiple submits with Javascript and Prototype使用 Javascript 和 Prototype 防止多次提交
【发布时间】:2012-06-16 06:03:07
【问题描述】:

我尝试通过 Prototype API 使用 Javascript 来防止 HTML 表单中的多次提交。这是我用来解决这个问题的sn-p:

function preventMultipleSubmits() {
    this.select('input[type="submit"]').invoke('disable');
    return true;
}

document.observe('dom:loaded', function() {
    var forms = $A(document.getElementsByTagName('form'));
    forms.each(function(form) {
        form.observe('submit', preventMultipleSubmits)
    });
});

sn-p 的问题在于提交表单不再调用服务器端。我知道IE浏览器不太支持CCS选择器,但是Firefox也有这个问题,我想先关注FF。

环境和工具:

  • 火狐13.0
  • 原型 1.6.1

【问题讨论】:

  • 似乎工作得很好(在 Chrome 和 Firefox 中)jsfiddle.net/jZx6P/1
  • 感谢您的帖子。我不知道你提到的网站。我会尝试依靠 jsfiddle 来寻找线索。

标签: javascript html forms prototypejs


【解决方案1】:
this.select('input[type="submit"]').invoke('disable');

这似乎只是将 disabled 属性添加到 submit 按钮。您仍然可以通过 enter 提交单字段表单。

你可以试试这样的:

<script type="text/javascript">
function preventMultipleSubmits(event) {
    if (this.hasClassName('allow-one-time-submit')) {
        this.removeClassName('allow-one-time-submit');
        // don't stop the event
    } else {
        alert('You already submitted');
        event.stop();
    }
}

document.observe('dom:loaded', function() {
    var forms = $A(document.getElementsByTagName('form'));
    forms.each(function(form) {
        // add Class Name to each and every form on load
        form.addClassName('allow-one-time-submit');
        form.observe('submit', preventMultipleSubmits)
    });

});
</script>


<form action="http://www.example.com/path/to/action" class="allow-one-time-submit">
    <input type="text">
    <input type="submit" value="Submit">
</form>

【讨论】:

  • 嗨,Artlung,感谢您的提示。你的评论很重要,我会考虑的。但问题是我必须处理现有的代码,因此向我的众多表单中的任何一个添加类名都不是一种选择。
  • 啊,好吧,很容易在加载时添加一个函数,将类名添加到每个表单。
  • @1tox 我继续添加代码以将类添加到每个表单。
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2014-06-13
相关资源
最近更新 更多