jQuery --- 利用input標籤flie屬性實現圖片上傳(單文件選取/可刪除已選圖片)

效果預覽:
這裏寫圖片描述

每一行都有註釋,宛如媽媽的嘮叨,再也不怕看不懂代碼了~~~~

想了解input的其他屬性點這裏

想知道URL.createObjectURL()詳細內容點這裏

js部分:

<!DOCTYPE html>
<html lang="zh">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>圖片上傳功能</title>
    </head>

    <body>
        <!-- accept 爲設置當前選取文件類型 若不限制圖片文件類型可設置爲 accept="image/*"-->
        <input type="file" id="fileUpload" accept="image/png,image/jpeg,image/jpg" />
        <div id="list-view"></div>
        <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
        <script>
            //建立空數組,用於存放獲取的文件路徑及相關的判斷操作
            var arr = [];
            //當input的值發生變化就觸發事件(利用值的變化判斷是否選取了文件)
            $('#fileUpload').change(function() {
                //限制選取文件的最大數量爲4
                if (arr.length > 3) {
                    //將input設置爲禁用狀態
                    $('#fileUpload').attr('disabled','disabled');
                }       
                //獲取選取的文件路徑並解析爲可渲染的路徑
                var imgSrc = URL.createObjectURL(this.files[0]);
                //將路徑添加至img標籤中
                var template = '<img src="' + imgSrc + '" style="width: 50px">';
                //將img標籤插入元素中,在頁面顯示
                $('#list-view').append(template);  
                //將路徑插入數組中,用於已選取文件數量判斷
                arr.push(imgSrc);   
            });

            //爲防止ajax動態添加數據無法綁定事件,故用body添加on事件給子元素添加,避開這個問題
            $('body').on('click','img',function(){
                //獲取當前點擊的元素下標(其下標與數組下標是一致的)
                var i = $(this).index();
                //判斷如果當前選取文件數量未超過4張而設置input爲非禁用狀態
                if (arr.length < 5) {
                    //清除input禁用狀態
                    $('#fileUpload').removeAttr("disabled");
                }           
                //根據點擊刪除元素的下標,刪除數組下標(img標籤只是負責渲染,但數據源是arr數組,判斷都是依靠他,所以必須刪除數組裏面的數據)
                arr.splice(i,i);
                //當前點擊元素下標爲0(即第一個時,清空數組)
                if (i == 0) {
                    arr.splice(0,1);
                }
                //刪除當前點擊元素
                $(this).remove();
            });
    </script>
    </body>

</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章