mym*_*and 18 html javascript jquery file-upload
我的表格有以下字段,
<form onsubmit="return checkcreateform()" action="/gallery/create" method="post" enctype="multipart/form-data">
<label>Type:*</label>
<label for="type-1">
<input type="radio" checked="checked" value="1" id="type-1" name="type">Image
</label>
<br>
<label for="type-2">
<input type="radio" value="2" id="type-2" name="type">Video
</label>
<label class="itemdetailfloatL required" for="file">File:*</label>
<input type="hidden" id="MAX_FILE_SIZE" value="8388608" name="MAX_FILE_SIZE">
<input type="file" tabindex="5" class="text-size text" id="file" name="file">
<input type="submit" value="Create" id="submit" name="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
我想在表单提交之前验证.在这里我如何验证用户选择类型为图像并上传视频或选择类型为视频和上传图像?
我们可以通过javascript或jquery实现这一点.快速验证这个方法吗?
请帮助我.
Gre*_*egL 51
而不是使用onsubmit
,使用jQuery的提交处理程序,并使用如下的一些JavaScript进行验证:
function getExtension(filename) {
var parts = filename.split('.');
return parts[parts.length - 1];
}
function isImage(filename) {
var ext = getExtension(filename);
switch (ext.toLowerCase()) {
case 'jpg':
case 'gif':
case 'bmp':
case 'png':
//etc
return true;
}
return false;
}
function isVideo(filename) {
var ext = getExtension(filename);
switch (ext.toLowerCase()) {
case 'm4v':
case 'avi':
case 'mpg':
case 'mp4':
// etc
return true;
}
return false;
}
$(function() {
$('form').submit(function() {
function failValidation(msg) {
alert(msg); // just an alert for now but you can spice this up later
return false;
}
var file = $('#file');
var imageChosen = $('#type-1').is(':checked');
if (imageChosen && !isImage(file.val())) {
return failValidation('Please select a valid image');
}
else if (!imageChosen && !isVideo(file.val())) {
return failValidation('Please select a valid video file.');
}
// success at this point
// indicate success with alert for now
alert('Valid file! Here is where you would return true to allow the form to submit normally.');
return false; // prevent form submitting anyway - remove this in your environment
});
});
Run Code Online (Sandbox Code Playgroud)
这里有jsFiddle版本,在IE8,RockMelt(基于Chrome)和Firefox 7上测试过:http://jsfiddle.net/Ngrbj/4/
Mos*_*oti 15
每个文件类型都有一个“type”属性,例如:“image/jpeg”、“audio/mp3”等等...
这是使用“匹配”方法(字符串)检查文件类型的一种方法的示例:
function getFileType(file) {
if(file.type.match('image.*'))
return 'image';
if(file.type.match('video.*'))
return 'video';
if(file.type.match('audio.*'))
return 'audio';
// etc...
return 'other';
}
Run Code Online (Sandbox Code Playgroud)
你也可以用布尔方式来写:
function isImage(
return !!file.type.match('image.*');
}
Run Code Online (Sandbox Code Playgroud)
提供的答案是有效的,但使用javascript数组函数,使用更少的行验证代码运行得更快一些:
var extensionLists = {}; //Create an object for all extension lists
extensionLists.video = ['m4v', 'avi','mpg','mp4', 'webm'];
extensionLists.image = ['jpg', 'gif', 'bmp', 'png'];
// One validation function for all file types
function isValidFileType(fName, fType) {
return extensionLists[fType].indexOf(fName.split('.').pop()) > -1;
}
Run Code Online (Sandbox Code Playgroud)
然后,提交代码中的if语句刚刚与:
if (imageChosen && !isValidFileType(file.val(), 'image')) {
return failValidation('Please select a valid image');
}
else if (!imageChosen && !isValidFileType(file.val(), 'video')) {
return failValidation('Please select a valid video file.');
}
Run Code Online (Sandbox Code Playgroud)