반응형
대화 상자를 열 때 대화 상자 내부의 포커스 텍스트 필드 설정
사용자 지정 텍스트 필드가 있으며 대화 상자를 열 때 해당 필드에 초점을 맞춰야 합니다.vue.js를 사용해서 포커스를 맞추려고 했는데refs
:
코드:
<v-app id="app">
<v-row align="center">
<v-col class="text-center" cols="12">
<v-btn color="primary" @click="openDialog()">Open dialog</v-btn>
</v-col>
</v-row>
<v-dialog v-model="dialog">
<v-card>
<v-card-title
class="headline grey lighten-2"
primary-title
>
Dialog
</v-card-title>
<v-card-text>
<v-row>
<v-col cols="6" class="ml-2">
<v-text-field
ref="name"
placeholder="Enter your name..."
type="text"
solo
flat
outlined
></v-text-field>
<v-btn
color="indigo"
dark
@click = "setFocusName()"
>Set focus</v-btn>
</v-col>
</v-row>
</v-card-text>
</v-card>
</v-dialog>
</v-app>
Javascript:
new Vue({
el: '#app',
vuetify: new Vuetify(),
data () {
return {
dialog: false
}
},
methods: {
setFocusName() {
this.$refs.name.focus();
},
openDialog() {
this.dialog = !this.dialog
this.setFocusName()
}
}
});
대화 상자 버튼을 클릭하여 열 때 텍스트 필드가 포커스가 맞지 않습니다.여기 내 모든 코드펜이 보여
대화 상자가 열렸을 때 포커스를 올바르게 맞추려면 어떻게 해야 합니까?
코드의 문제는 이 코드에 접속하려고 한다는 것입니다.$ref
실제로 렌더링되기 전에 작업 코드를 가진 샌드박스를 소개합니다.https://codepen.io/Djip/pen/ZEYezzm?editors=1011
추가한 버그를 해결하려면setTimeout
대화 상자를 열고 0.2초 후에 포커스를 트리거합니다.처음 해봤는데$nextTick
하지만 그것만으로는 충분치 않았습니다. 타이머를 최대한 낮게 조정해 볼 수 있습니다.
setFocusName() {
this.$refs.name.focus();
},
openDialog() {
this.dialog = !this.dialog
setTimeout(() => {
this.setFocusName()
}, 200)
}
대화 상자를 전환하는 속성의 워처 안에 포커스 논리를 설정합니다.
watch: {
dialog: function(value) {
if (value) {
setTimeout(() => {
this.$refs.inputrefname.$refs.input.focus();
});
}
}
}
언급URL : https://stackoverflow.com/questions/59407003/set-focus-text-field-inside-dialog-when-dialog-opened
반응형
'programing' 카테고리의 다른 글
<< = >보다 빠릅니까? (0) | 2022.08.29 |
---|---|
memset() return value의 용도는 무엇입니까? (0) | 2022.08.29 |
Vue 컴포넌트의 소품 어레이가 반응하지 않음 (0) | 2022.08.29 |
a++++b가 왜 안 되지? (0) | 2022.08.29 |
VueJ - 슬롯과 스코프 슬롯을 자 템플릿의 컴포넌트에 전달 (0) | 2022.08.29 |