vue3 事件响应问题

2022-10-01 15:33:09 +08:00
 fangwenxue
setup(){
    const uploadInput = ref(null)
    const clickUpload = (e) => {
      if (uploadInput.value) {
        console.log(uploadInput.value) # 每次触发都打印了 2 次
        uploadInput.value.click()
      }
    }
    const fileChange = (e) => {
      console.log(e) # 第二次选择文件没有触发事件
    }
}

    
<template>
    <div class="container content">
        <div class="upload-box" @click="clickUpload">
        	<input type="file" class="hidden" accept="image/*" ref="uploadInput" @change="fileChange">
        </div>
    </div>
</template>

第二次选择文件为什么没有触发事件 ?

933 次点击
所在节点    问与答
5 条回复
rabbbit
2022-10-01 16:31:30 +08:00
同一个文件不会而二次触发 change 事件
fangwenxue
2022-10-01 16:32:55 +08:00
@rabbbit Soga

clickUpload 为什么会打印 2 次,加了 stop 也不行
rabbbit
2022-10-01 16:57:57 +08:00
弹一次就 <input @click.stop type="file" class="hidden" accept="image/*" ref="uploadInput" @change="fileChange">
为什么要在 upload-box 里 uploadInput.value.click(),是想自定义 input 按钮的样式吗?
rabbbit
2022-10-01 17:22:14 +08:00
研究了一下,1 楼的回复应该是错误的。我也不清楚为什么不会触发两次。
不过有一点可以确定的是,不要这样写。
现在的代码加个 setTimeout 进去直接就变成死循环了。

<template>
<div class="container content">
<div class="upload-box" @click="clickUpload">
<input type="file" class="hidden" accept="image/*" ref="uploadInput" @change="fileChange">
</div>
</div>
</template>

<script>
import {ref} from 'vue'
export default {
setup(){
const uploadInput = ref(null)
const clickUpload = (e) => {
if (uploadInput.value) {
console.log(uploadInput.value)
setTimeout(() => {
uploadInput.value.click()
})
}
}
const fileChange = (e) => {
console.log(e)
}
return {
uploadInput,clickUpload,fileChange
}
}
}
</script>
yunyuyuan
2022-10-01 18:00:10 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884214

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX