Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用requirejs提交表单大约提交800次_Javascript_Html_Forms_Requirejs - Fatal编程技术网

Javascript 使用requirejs提交表单大约提交800次

Javascript 使用requirejs提交表单大约提交800次,javascript,html,forms,requirejs,Javascript,Html,Forms,Requirejs,在当前的项目中,我们试图切换到requrejs,但我在提交简单表单时遇到了一些问题。每次单击表单submit buuton时,表单存储大约800次。我在表单中有一个令牌,一旦表单被基于PHP的存储过程存储,它就会被删除。我已经尝试使用数据属性来防止重复提交 $("#myForm").submit(function(event) { if($(this).data('submitted') === true) { event.preventDefault();

在当前的项目中,我们试图切换到requrejs,但我在提交简单表单时遇到了一些问题。每次单击表单submit buuton时,表单存储大约800次。我在表单中有一个令牌,一旦表单被基于PHP的存储过程存储,它就会被删除。我已经尝试使用数据属性来防止重复提交

$("#myForm").submit(function(event) {
    if($(this).data('submitted') === true) {
        event.preventDefault();
        return false;
    }
    $(this).data('submitted', true);
});
我甚至尝试将全局变量设置为true/false或一些超时函数,并使用requirejs提供的domReady模块,使所有字段都成为只读/禁用按钮。没有什么变化。在所有情况下,表单在取消提交之前提交大约800次。请问,有人知道为什么表单提交太多吗

谢谢,卡尔

编辑 我的requirejs配置减少了配置,因为文件名在这里并不重要,而且配置很大

    var config = {
    baseUrl: 'http://example.com/scripts/',
    paths: {
        app1: 'app/app1',
        app2: 'app/app2',
        lib1: 'libs/lib1'
    },
    waitSeconds: 20
}


requirejs.config(config);
// initializes the main page, loading page-dependent modules
require(['initial', "libs/domReady!"], function(app) {
    app.init();
});
// the module app, a bit reduced. This will be loaded during the module loader and initialized
define("app/modules/form", [
    'jquery',
    'libs/domReady',
    'document',
    'notifier'
], function($, domReady, doc) {
    var module = {
        needInit: true,
        initialized: false,
        init: function() {
            if(this.initialized) return false;
            this.initialized = true;
            $("#myForm").submit(function(event) {
                    var $form = $(this);
                    if($form.data('submitted')) {
                        event.preventDefault();
                        return false;
                    }
                    $form.data('submitted', true);
                    // normally would validate here. this has been removed to reduce possible script errors
                    return true;
                });
        }
    }

});
主脚本中调用的app.init有一个模块加载器,用于从数据属性加载模块,并防止双重加载已加载的模块

编辑2
我现在包括了一个事件处理程序列表器,它只将1个事件处理程序记录到表单中。想想看,事件处理程序没有被多次加载吗?

看起来@Adam和@Louis都是对的。我太专注于表单及其事件,没有认出页面的其余部分。经过长时间的研究和更多的测试,我发现页面上使用了一个外部插件,而不是挂接到表单中的表单内部。禁用插件或至少更改为新插件后,表单按预期提交。非常感谢您的建议在哪里搜索

不要试图破解它以防止重复提交,找出根本原因。听起来您可能多次将requirejs设置架构为包含这段代码,从而多次附加提交处理程序。你能检查页面上加载的JS代码并验证提交处理程序只存在一次吗?我已经尝试了,我能做的是:m脚本加载一次。我已经验证过,模块的init函数只触发一次。如何防止requirejs以另一种方式多次加载模块?如果不看到您的requirejs代码,我们无法知道。@KarlAftring requirejs模块是单例的,。您不太可能意外地获得同一模块的多个实例。您添加了一个可以列出事件处理程序的工具。除非此工具专门用于处理jQuery,否则它将具有误导性。jQuery为每个事件类型安装一个处理程序,即使开发人员同时安装100个不同的处理程序,然后对开发人员安装的所有处理程序执行自己的内部分派。