为何const定义的postTitle等表单值变量仅在事件监听方法内可用?
问题原因解释
为什么
titleInput、bodyInput定义在全局也能正常使用
这两个变量存储的是DOM元素的引用,脚本初始化执行时,只要对应id的DOM元素已经完成加载,拿到的引用就会一直指向页面上对应的输入框元素,不会随后续用户交互改变,所以无论在函数内还是函数外都可以正常访问到对应的输入框元素。为什么
postTitle、postBody不能放在全局定义
这两个变量存储的是你读取.value那一刻的静态值快照,要是放在全局,脚本初始化运行时就会立刻读取当时输入框的value(通常是初始的空字符串),后续用户在输入框中输入内容时,这两个变量不会自动同步更新,始终保留初始化时的旧值,自然无法拿到用户实际提交的内容。
只有把取值逻辑放在submit事件的回调函数内部,才能在用户触发提交动作的当前时间点,读取到输入框最新的内容,拿到正确的用户输入值。补充说明
.value并非只能在addEventListener的回调方法内获取,本质是你需要在「用户已经完成输入、触发提交动作」的时机读取输入框的值,才能得到正确的结果,而这个时机刚好对应submit事件回调的执行时机。
内容的提问来源于stack exchange,提问作者Espskully
相关产品推荐
相关产品推荐

