下面是我的javascript代码,我想要发生的是,当用户点击表单中的“上传”按钮时,它会检查“imageValidation”以查看文件输入是否正确,如果是然后它进入“startImageUpload()”函数,如果文件输入不正确,那么它应该显示一条警告“不是图像”,它不应该转到'startImageUpload'函数。
问题在于它根本就没有这样做。当用户点击“上传”按钮,然后没有出现警报,没有上传,没有任何反应。我需要什么才能达到上述目的?
以下是表格:
var $fileImage = $("<form action='imageupload.php' method='post' enctype='multipart/form-data' target='upload_target' onsubmit='imageClickHandler(this); return false;' class='imageuploadform' >" +
"<label> Image File: <input name='fileImage' type='file' class='fileImage' /></label><br/>" +
"<input type='submit' name='submitImageBtn' class='sbtnimage' value='Upload' /></label></form>");
以下是用户点击“上传”按钮时的功能,它遵循以下功能:
function imageClickHandler(){
if(imageValidation()){
startImageUpload(imageuploadform);
}
}
下面是imageValidation()函数,它验证文件输入,但我不知道这是否正常工作?
function imageValidation() {
$(".fileImage").change(function() {
var val = $(this).val();
switch(val.substring(val.lastIndexOf('.') + 1).toLowerCase()){
case 'gif': case 'jpg': case 'png':
return true;
break;
default:
$(this).val('');
// error message here
alert("not an image");
return false;
break;
}
});
}
下面是'startImageUpload()'函数,我知道它在尝试验证输入文件之前有效。
function startImageUpload(imageuploadform){
$(imageuploadform).find('.imagef1_upload_process').css('visibility','visible');
$(imageuploadform).find('.imagef1_cancel').css('visibility','visible');
$(imageuploadform).find('.imagef1_upload_form').css('visibility','hidden');
sourceImageForm = imageuploadform;
return true;
}
答案 0 :(得分:4)
您的onsubmit
始终返回false
...
更改它以返回imageClickHandler
<form .... onsubmit="return imageClickHandler(this);">
并将JS函数更改为返回值
function imageClickHandler(form){
if(imageValidation()){
return startImageUpload(form);
}
return false;
}
另外 - 确保您的imageValidation
函数具有默认返回值(在函数的最后一行添加return false;
)
为了防止在用户选择文件时发生验证,请删除收听更改事件,并将验证更改为:
function imageValidation() {
var val = $(".fileImage").val();
switch(val.substring(val.lastIndexOf('.') + 1).toLowerCase()){
case 'gif':
case 'jpg':
case 'png':
return true;
default:
$(".fileImage").val('');
// error message here
alert("not an image");
return false;
}
return false;
}
答案 1 :(得分:2)
有几件事。首先,验证的结果可能会触发2个结果中的一个:执行此操作或发出警报。但是警报的结果在验证函数内部下降,而在返回结果返回结果后返回顶部。建议将其移动并使用if-then-else。代码风格的东西。
其次,imageClickHandler使用名为imageuploadform的JS对象。不要在任何地方看到这样的JS对象。有一个带有imageuploadform类的dom元素。但那不是一回事。当然没有显示整个html / js。
第三,将参数传递给imageClickHandler,但函数定义不定义任何参数。意图是什么?
如果您遇到问题,请尝试暂时向所有地方发送警报消息以跟踪程序执行情况。这可能会告诉你执行的进展情况,或者不是。
正如Yaron所说,如果startUpload没有在后台进行实际上传,那么你必须从onClick返回潜在的'true'结果。返回'false'确保它永远不会进入php页面。
function imageClickHandler(){
var imageuploadform = $('form.imageuploadform').get(0);
if(imageValidation()){
startImageUpload(imageuploadform);
return true;
}
else {
alert("not an image");
return false;
}
}
function imageValidation() {
$(".fileImage").change(function() {
var val = $(this).val();
switch(val.substring(val.lastIndexOf('.') + 1).toLowerCase()){
case 'gif': case 'jpg': case 'png':
return true;
break;
default:
return false;
break;
}
});
}
var $fileImage = $("<form action='imageupload.php' method='post' enctype='multipart/form-data' target='upload_target' onsubmit='return imageClickHandler();' class='imageuploadform' >" +
"<label> Image File: <input name='fileImage' type='file' class='fileImage' /></label><br/>" +
"<input type='submit' name='submitImageBtn' class='sbtnimage' value='Upload' /></label></
答案 2 :(得分:0)
您是否尝试完全从验证中删除交换机并仅返回警报()以进行测试?
也许是'val'的变量,它与jQuery val()混淆了?尝试使用不同的var名称?
var val = $(this).val();
$(this).val('');