在preventDefault之后无法提交

时间:2012-05-23 16:06:53

标签: jquery validation submit uploadify preventdefault

我使用脚本进行表单验证(validationEngine)和脚本进行文件上传(uploadify)。

为了更好地管理表单提交:

  • validationEngine检测我的表单是否可以发送。
  • 如果我可以提交,我上传文件
  • 我上传的所有文件(onQueueComplete uploadify)后,我都会提交表单。

如果我在onQueueComplete中创建alert('foo');,它就可以了。但如果我提交我的selector.submit() ......没有任何反应。

$(function() {
    $('#file_upload').uploadify({
        'fileSizeLimit' : '2048KB',
        'auto': false,
        'swf'      : '<?php echo site_url('public/modules/uploadify/uploadify.swf')?>',
        'uploader' : '<?php echo site_url('public/modules/uploadify/uploadify.php')?>',
        'buttonText' : 'Ajouter...',
        'method' : 'post',
        'formData' : {'userMail' : '<?php echo $userMail ?>'},
        'onQueueComplete' : function(queueData) {
            $('#validator').submit();
        } 
    });
});

$(document).ready(function() {
    $("#validator").validationEngine();
    $('#validator').submit(function(event){
        event.preventDefault();
        var canSubmit = $("#validator").validationEngine('validate');
        if(canSubmit)
        {
            $('#file_upload').uploadify('upload','*');
        }
    });
});

使用此代码,所有工作但提交不起作用。这就像事件不存在一样。

3 个答案:

答案 0 :(得分:2)

两件事:

(1)您的选择器位于#validator,而您在非功能性调用中使用validator

(2)您preventDefault发送submit上发生的每个#validator事件,因此即使事件被正确触发,也不会执行提交操作。您需要调用本机DOM元素的submit操作:

$('#validator')[0].submit();

[0]从选择中获取本机DOM元素,然后调用本机submit函数。这意味着没有运行jQuery处理程序,因此您运行的event.preventDefault调用也不会运行,因此该事件将起作用。

答案 1 :(得分:1)

不应该:

$('#validator').submit();

答案 2 :(得分:0)

这种方法本身使任务复杂化。我决定更容易做一个新的例程。

我让文件自动加载。我刚创建了删除的元素。

无论如何,要发送我的邮件,文件附件将被销毁。

这是我的新代码,它有效。

/**
 * uploadify
 * 
 * we add a onUploadStart event to manage the file. uploadify uploads directly our files, but maybe the user missclick
 * and wants to remove some file.
 * 
 * The send action (controller webmail) doesn't upload files, uploadify do that for us.
 * We just need in the post for the name of the file registered in a hidden input.
 */
$(function() {
    $('#file_upload').uploadify({
        'fileSizeLimit' : '2048KB',
        'swf'      : '<?php echo site_url('public/modules/uploadify/uploadify.swf')?>',
        'uploader' : '<?php echo site_url('public/modules/uploadify/uploadify.php')?>',
        'buttonText' : 'Ajouter...',
        'method' : 'post',
        'formData' : {'userMail' : '<?php echo $userMail ?>'},
        'onUploadStart' : function(file){
            $('#uploadList').append('<div class="file"><a href="#" class="deleteFile" rel="'+file.name+'">'+file.name+' - [x]</a><input type="hidden" name="files[]" value="'+file.name+'" /></div>');
        }

    });

    /**
     * the .deleteFile elements are added after domready. We have to attach event click.
     * We remove the parent block to remove a file of mail attachment
     */
    $('#uploadList').on('click','.deleteFile',function(){
        var rel = $(this).prop('rel');
        /*$('input[value="'+rel+'"]').remove();*/
        $(this).parents('div:first').remove();
    });
});

$(document).ready(function() {
    $("#message").cleditor()[0].focus();

    $("#validator").validationEngine();     
});