Rails 关于 rails7 中 引入 JavaScript 下的 js 代码,页面却无法调用 js 自定义的函数问题

lobb · 2023年05月19日 · 最后由 willx 回复于 2023年05月19日 · 263 次阅读

document.addEventListener("turbo:load",(event) => {

   function show (file){
    console.log(file);

  }
})


function show (file){    //放在外面也没用
    console.log(file);

  }

上面定义的函数在视图 <%= f.file_field :picture , onchange: "show(this.files[0])" %> 中引用,结果浏览器报错 undefined 找不到这个函数。

window.sohw = function (file){    
    console.log(file);

  }

只有把他给于 window 全局变量才能被访问到,这个为什么呢?

关键词:JavaScript 的函数作用域规则

因为 rails 7 默认用 importmap,这个会使用 来放 js 代码,这个是模块化的,你一个文件里的内容不 export 出去,其他的文件都是看不到的。</p> <p>HTML 中 onchange onclick 这种只能使用全局变量。</p> <p>以前不用 type=&quot;module&quot; 的时候,你直接在顶层作用于声明变量他就会是全局的。现在不行了。</p>

需要 登录 后方可回复, 如果你还没有账号请 注册新账号