<!DOCTYPE html>
<html>
<head>
<title>
加強的HTML文件上傳</title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312"/>
</head>
<body>
<!--1.FileList對象和File對象
兩個屬性:
accept:指定上傳文件類型(指定MIME類型)
不要單靠accept過濾文件,這只是客戶端過濾,很脆弱,若是要過濾,還須要在服務器端設置過濾
multiple:容許上傳多個文件
javascript經過files屬性訪問上傳文件返回一個FileList對象,FileList對象相對於一個數組,開發者能夠經過相似訪問數組的方式訪問每個File對象
File對象包含以下屬性:name、type、size等
若是要訪問文件具體內容(二進制數據),須要藉助FileReader等對象
-->
<input type="file" id="images" name="images" multiple accept="image/*"/><br/>
<input type="button" value="顯示文件" onClick="showDetails()"/>
<script type="text/javascript">
var showDetails=function(){
var imageEle=document.getElementById('images');
var fileList=imageEle.files;
for(var i=0;i<fileList.length;i++){
var file=fileList[i];
div=document.createElement('div');
div.innerHTML="第"+(i+1)+"文件的文件名是:"+file.name+"---文件類型是:"+file.type+"---文件大小是:"+file.size;
document.body.appendChild(div);
}
}
</script> javascript
<!--使用FileReader讀取文件內容
FileReader一樣是一個js對象
提供了三個讀取文件的方式:
readAsText(file,encoding),以文本文件的方式讀
readAsBinaryString(file),以二進制方式讀取
readAsDataURL(file),以base64方式把文本內容編碼成DataURL格式字符串
-->
<input type="file" id="file"/><br/>
<progress id="pro" value="0"></progress>
<div id="result"></div>
<input type="button" value="讀取文本文件" onClick="readText()"/><br/>
<input type="button" value="讀取二進制文件" onClick="readBinary()"/><br/>
<input type="button" value="以DataURL方式讀取" onClick="readURL()"/><br/>
<script type="text/javascript">
var reader=null;
//若是瀏覽器支持FileReader對象
if(FileReader){
reader=new FileReader();
}
//若是瀏覽器不支持FileReader對象
else{
alert("瀏覽器不支持FileReader對象");
}
var readText=function(){
//經過正則表達式驗證該文件是不是文本文件
var isText="text\/\w+";
var fileList=document.getElementById('file').files;
//if(isText.test(fileList[0].type)){
reader.readAsText(fileList[0],"utf-8");
reader.onload=function(){
document.getElementById('result').innerHTML=reader.result;
}
//}
//else{
//alert("選擇文件不是文本文件");
//}
}
var readBinary=function(){
var fileList=document.getElementById('file').files;
var pro=document.getElementById('pro');
pro.max=fileList[0].size;
reader.readAsBinaryString(fileList[0]);
reader.onprogress=function(evt){
pro.value=evt.loaded;
}
reader.onload=function(){
document.getElementById('result').innerHTML=reader.result;
}
}
var readURL=function(){
var fileList=document.getElementById('file').files;
reader.readAsDataURL(fileList[0]);
reader.onload=function(){
document.getElementById('result').innerHTML=reader.result;
}
}
</script> html
<!--4、HTML5新增的客戶端校驗
1.使用校驗屬性執行校驗
<required>:指定該控件必須填寫
<pattern>:指定該控件必須符合的正則表達式
min/max/step:只對數字類型、日期類型有效
-->
<form action="add">
圖書名:<input name="name" type="text" required/><br/>
圖書ISBN:<input name="isbn" type="text" required pattern="\d{3}-\d-\d{3}-\d{5}"/><br/>
圖書價格:<input name="price" type="number" min="20" max="50" step="5"/><br/>
<input type="submit" value="提交"/>
</form>
<!--2.調用checkValidity方法進行校驗-->
<form action="abc">
生日:<input name="birth" type="date" id="birth"/><br/>
電郵:<input id="email" name="email" type="email"/><br/>
<input type="submit" value="提交" onClick="return check()"/>
<script type="text/javascript">
var check=function(){
return commonCheck("email","電郵","字段必須符合電郵格式");
}
var commonCheck=function(field,fieldName,tip){
var targetEle=document.getElementById(field);
if(targetEle.value.trim()==""){
alert(fieldName+"不能爲空!");
return false;
}
else if(!targetEle.checkValidaty()){
alert(fieldName+tip);
return false;
}
}
</script>
</form>
<!--除此以外,HTML5爲全部表單、表單控件提供了一個validity屬性,該屬性的值是一個ValidityState對象,該對象表明了表單、表單控件的輸入校驗狀態,其中ValidityState的valid屬性能夠表示該表單、表單控件是否經過輸入校驗
3.自定義錯誤提示
setCustomValidity()方法
調用了某個控件的該方法意味着該表單控件沒有經過輸入校驗。所以只有當表單控件自己沒有經過輸入校驗時才能調用該方法,而不能隨便直接調用該方法,不然可能致使原本能夠經過校驗的表單控件也變成了不能經過校驗了
-->
<form action="asdf" >
圖書名:<input name="a" type="text" required placeholder="input bookname"/><br/>
<input type="submit" value="提交" onclick="checkInput()"/>
</form>
<!--目前瀏覽器對自定義錯誤的支持不是很理想-->
<script style="text/javascript">
var checkInput=function(){
if(!document.getElementById('a').checkValidity()){
document.getElementById('a').setCustomValidity("圖書名不能爲空!");
}
}
</script>
<!--4.關閉校驗
爲<form>元素增減novalidate屬性,該屬性的值要麼是novalidate要麼是省略屬性值
爲<input>或<button>元素設置formnovalidate屬性,該屬性的值要麼是novalidate要麼是省略屬性值
第一種方式將會關閉表單的輸入校驗功能,第二種方式則是指定的按鈕或表單失去校驗檢驗
-->
<body>
</html> java