在提交表单之前完成运行javascript

时间:2014-02-04 19:15:50

标签: javascript php jquery forms

我想在提交表单之前完成运行我的javascript。我的脚本函数正在运行,但即使脚本没有完成加载其百分比效果,它也会提交我的表单。

    <form action="<?php echo '../../event_gallery/uploaded/'.$this->uri->segment(3); ?>" onsubmit="openLoadingModal()" method="post">
            <input type="file" multiple="" name="images[]"> 
            <button type="submit" id="send" class="button">
                <span class="button-icon"><span class="icon-download"></span></span>
                    Upload
            </button></form>

我的功能脚本

    function openLoadingModal()
    {
        var timeout;

        $.modal({
            contentAlign: 'center',
            width: 240,
            title: 'Uploading',
            content: '<div style="line-height: 25px; padding: 0 0 10px"><span id="modal-status">Uploading Images</span><br><span id="modal-progress">0%</span></div>',
            buttons: {},
            scrolling: false,
            actions: {
                'Cancel': {
                    color:  'red',
                    click:  function(win) { win.closeModal(); }
                }
            },
            onOpen: function()
            {
                    // Progress bar
                var progress = $('#modal-progress').progress(100, {
                        size: 200,
                        style: 'large',
                        barClasses: ['anthracite-gradient', 'glossy'],
                        stripes: true,
                        darkStripes: false,
                        showValue: false
                    }),

                    // Loading state
                    loaded = 0,

                    // Window
                    win = $(this),

                    // Status text
                    status = $('#modal-status'),

                    // Function to simulate loading
                    simulateLoading = function()
                    {
                        ++loaded;
                        progress.setProgressValue(loaded+'%', true);
                        if (loaded === 100)
                        {
                            progress.hideProgressStripes().changeProgressBarColor('green-gradient');
                            status.text('Done!');
                            /*win.getModalContentBlock().message('Content loaded!', {
                                classes: ['green-gradient', 'align-center'],
                                arrow: 'bottom'
                            });*/

                            setTimeout(function() { win.closeModal(); }, 1500);

                        }
                        else
                        {
                            if (loaded === 1)
                            {
                                status.text('Loading data...');
                                progress.changeProgressBarColor('blue-gradient');
                            }
                            else if (loaded === 25)
                            {
                                status.text('Uploading Images (1/3)...');
                            }
                            else if (loaded === 45)
                            {
                                status.text('Uploading Images (2/3)...');
                            }
                            else if (loaded === 85)
                            {
                                status.text('Uploading Images (3/3)...');
                            }
                            else if (loaded === 92)
                            {
                                status.text('Initializing...');
                            }
                                timeout = setTimeout(simulateLoading, 50);
                        }
                    };

                // Start
                timeout = setTimeout(simulateLoading, 2000);
            },
            onClose: function()
            {
                // Stop simulated loading if needed
                clearTimeout(timeout);
            }
        });
        return true;
    };

2 个答案:

答案 0 :(得分:0)

如果没有看到所有代码或网站的工作示例,就很难调试代码。

这些是我的建议(所有必须经过验证才能正常工作):

  1. onsubmit="openLoadingModal()"更改为onsubmit="return openLoadingModal()"。这将使表单知道期望openLoadingModal()的返回值。

  2. enctype="multipart/form-data"添加到表单中,因为您要上传文件。

  3. 目前,openLoadingModal()下的所有代码都是非阻塞。这意味着它会在最后一行返回true,无论发生什么。 $.modalsetTimeout()是异步/非阻止方法。尽管名称$.modal令人困惑,但另有说法。只有alertconfirmprompt等原生Javascript对话框才会出现BLOCKING对话框。您可以考虑使用它们。目前还不是很清楚你想要实现什么,但你可能需要使用进度条实现ajax文件上传,而不是表单和单独的进度条。您也可以尝试将表单发布到隐藏的iframe,然后您将保留在同一页面的上下文中。

  4. 确保正确包含jQuery和jQuery UI。

  5. 我试图运行你的代码但它不会运行。您可能有其他语法问题阻止您的代码正确执行。

  6. 我试图在

    上运行你的代码

    希望这有帮助。

答案 1 :(得分:0)

在是否应提交表单以代替should_not_submit_form时插入您自己的逻辑。当然,如果您有多个表单,请将正确的选择器放在“表单”的位置。

$("form").on("submit", function(e) {
    if(should_not_submit_form) e.preventDefault();
});