0

我使用一个用于表单验证的脚本(validationEngine)和一个用于文件上传的脚本(uploadify)。

为了最好地管理我的表单提交:

  • validationEngine 检测是否可以发送我的表单。
  • 如果我可以提交,我上传我的文件
  • 一旦我所有上传的文件(onQueueCompleteuploadify),我提交我的表格。

如果我alert('foo');在我的 onQueueComplete 中创建一个,它可以工作。但是,如果我提交我的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','*');
        }
    });
});

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

4

3 回答 3

2

两件事情:

(1) 您在其他地方的选择器是#validator,而您validator在非功能调用中使用。

(2) 您正在preventDefault处理源自 的每个submit事件#validator,因此即使该事件被正确触发,它也不会执行提交操作。您需要改为调用本机 DOM 元素的submit操作:

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

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

于 2012-05-23T16:10:46.783 回答
1

不应该是:

$('#validator').submit();
于 2012-05-23T16:10:42.013 回答
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();     
});
于 2012-05-24T08:59:19.277 回答