js函数中用setAttribute创建的onchange属性所对应的函数无法赋予参数

下面是01.html文档的内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<p id="AX"></p>

<script>
    f("AX");
    function f(x){
        let a=document.createElement("input");
        a.setAttribute("type","file");
        a.setAttribute("onchange","g(x)");
        document.body.appendChild(a);
    }
    function g(x){
        document.getElementById(x).innerHTML="已上传";
    }
</script>

</body>
</html>

运行01.html,上传文件,我希望它出现“已上传”的字样,然而并没有出现。
如何才能让onchange对应的函数中使用原函数的参数?

你应该这样写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p id="AX"></p>
<script>
    f("AX");
    function f(x){
        let a=document.createElement("input");
        a.setAttribute("type","file");
        a.setAttribute("id","ca");
        document.body.appendChild(a);
    }
  document.getElementById("ca").onchange=function(){
        document.getElementById("AX").innerHTML="已上传";

}
</script>
</body>
</html>

运行截图
img

问题已解决,最好的答案如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p id="AX"></p>
<script>
    f("AX");
    function f(x){
        let a=document.createElement("input");
        a.setAttribute("type","file");
        a.onchange=function(){
            document.getElementById(x).innerHTML="已上传";
        }
        document.body.appendChild(a);        
    }
</script>
</body>
</html>
  1. 首先你的onchange是个方法 不是属性 所以不能直接setAttribute
  2. 了解一下setAttribute 是一个只能设置属性的方法

祝好