我使用脚本进行表单验证(validationEngine)和脚本进行文件上传(uploadify)。
为了更好地管理表单提交:
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','*');
}
});
});
使用此代码,所有工作但提交不起作用。这就像事件不存在一样。
答案 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();
});