<head> <meta charset="UTF-8"> <meta name="v[...]"/>

chan

朝生暮死不足笑 但悲百年不足道

change事件


{% load static %}

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>示例1:直接通过秘钥进行删除上传文件</h1>
    <input type="file" name="upload_file" id="uploadFile" multiple />

    <script src="{% static 'js/jquery-3.4.1.min.js' %} "> </script>
    <script src="{% static 'js/cos-js-sdk-v5.min.js' %} "> </script>
    <script>
        var cos;
        $(function () {
            initCOS();
            bindChangeFileInput();
        });

        function initCOS() {
            cos = new COS({
                SecretId: 'AKIDFPJSXQEk8PXVL3Tx5zf6MSL0Sf7Qoikg',
                SecretKey: 'yiCWfZCXcQxJZlqncKvRu5DKHySg8sMp',
            });
        }

        function bindChangeFileInput() {
            $("#uploadFile").change(function () {
                // 获取要上传的所有文件对象列表
                var files = $(this)[0].files;
                $.each(files, function (index, fileObject) {
                    var fileName = fileObject.name;
                    // 上传文件
                    cos.putObject({
                        Bucket: 'wangyang-1251317460', /* 必须 */
                        Region: 'ap-chengdu',     /* 存储桶所在地域,必须字段 */
                        Key: fileName,              /* 必须 */
                        StorageClass: 'STANDARD',
                        Body: fileObject, // 上传文件对象
                        onProgress: function (progressData) {
                            console.log("文件上传进度--->",fileName,JSON.stringify(progressData));
                        }
                    }, function (err, data) {
                        console.log(err || data);
                    });

                })

            })
        }
    </script>
</body>

</html>

这个是怎么绑定的事情,有点晕。我记得以前的绑定,是有个onclick好像。
$(“#uploadFile”).change(function () 这是怎么绑定的。  

在这段代码中,$("#uploadFile").change(function () {...}) 是通过 jQuery 来绑定事件的方式,具体来说,它是绑定了一个 change 事件处理函数到一个文件输入框(<input type="file">)上。

详细分析:

  1. jQuery的选择器
    • $("#uploadFile") 这个部分是一个 jQuery 选择器,用于选取页面上 id="uploadFile" 的元素,即文件输入框 <input type="file" id="uploadFile" />
  2. change事件
    • change 是一种 HTML事件,通常用于表单控件,当控件的值发生变化时触发。对于文件输入框(<input type="file">),当用户选择了文件后,change事件会被触发。
    • 例如,用户点击了文件输入框,选择了文件后,这时 change 事件就会被触发。
  3. 事件绑定
    • $("#uploadFile").change(function () {...}) 这一行代码的作用是 绑定 一个 事件处理函数(即 function () {...})到 #uploadFile 这个文件输入框的 change 事件上。
    • 当用户选择文件后,change 事件会被触发,从而调用绑定的回调函数。
  4. 回调函数
    • function () {...} 是事件触发后执行的函数。当文件输入框的内容发生变化时,回调函数会接收到当前选中的文件。
    • 代码中的 var files = $(this)[0].files; 获取到用户选择的文件列表,接着通过 $.each 遍历每个文件并上传。

为什么不需要 onclick

onclick 事件通常是用于处理鼠标点击事件的,例如按钮的点击。对于文件上传的场景,<input type="file"> 标签本身并没有 onclick 事件来处理文件选择。相反,<input type="file"> 元素会触发 change 事件,当用户选择文件后,触发的就是这个事件。因此,在这段代码中,使用 change 事件来处理文件的选择。

代码解释:

javascript复制代码$("#uploadFile").change(function () {
    // 获取用户选择的文件列表
    var files = $(this)[0].files;
    $.each(files, function (index, fileObject) {
        var fileName = fileObject.name;  // 获取文件名
        // 上传文件到 COS(腾讯云对象存储)
        cos.putObject({
            Bucket: 'wangyang-1251317460', // 存储桶
            Region: 'ap-chengdu',           // 区域
            Key: fileName,                  // 文件名
            StorageClass: 'STANDARD',       // 存储类型
            Body: fileObject,               // 上传的文件对象
            onProgress: function (progressData) {  // 上传进度回调
                console.log("文件上传进度--->", fileName, JSON.stringify(progressData));
            }
        }, function (err, data) {
            console.log(err || data);  // 上传结果
        });
    });
});

总结:

  • 事件绑定$("#uploadFile").change(function () {...}) 使用了 jQuery 来为 #uploadFile(文件输入框)绑定了 change 事件。当文件选择发生变化时,回调函数会被触发。
  • 回调函数:回调函数处理的是文件选择后的逻辑,包括获取文件列表并上传文件。
  • onclick的区别onclick 是鼠标点击事件,而 change 事件是文件输入框特有的事件,在文件选择发生时触发。

通过这种方式,你不需要使用 onclick 处理文件选择,直接使用 change 事件更符合文件上传的需求。

评论
还没有评论
    发表评论 说点什么