在preventDefault之后无法提交

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

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

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

如果我发出alert('foo'); 在我的onQueueComplete中,它有效。 但是,如果我提交我的selector.submit() ……没有任何反应。

 $(function() { $('#file_upload').uploadify({ 'fileSizeLimit' : '2048KB', 'auto': false, 'swf' : '', 'uploader' : '', 'buttonText' : 'Ajouter...', 'method' : 'post', 'formData' : {'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','*'); } }); }); 

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

两件事情:

(1)你的选择器在其他地方是#validator ,而你在非function调用中使用validator

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

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

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

不应该是:

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

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

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

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

这是我的新代码,它的工作原理。

 /** * 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' : '', 'uploader' : '', 'buttonText' : 'Ajouter...', 'method' : 'post', 'formData' : {'userMail' : ''}, 'onUploadStart' : function(file){ $('#uploadList').append(''); } }); /** * 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(); });