防止在点击 VuetifyJS 组合框后调用软键盘
Prevent invoking the softkeyboard after tapping a VuetifyJS combobox
我需要在手机上使用 VuetifyJS combobox。一旦组合框字段被点击,它就会调用软键盘。如何防止触发软键盘?
CodePen 示例:https://codepen.io/anon/pen/KxVEea
HTML:
<v-combobox
v-model="select
:items="items"
label="Select an item"
></v-combobox>
JS:
new Vue({
el: '#app',
data () {
return {
select: 'Programming',
items: [
'Programming',
'Design',
'Vue',
'Vuetify'
]
}
}
})
根据this answer using readonly="true"
solve the issue, I found a codePen用更高级的功能来尝试和测试这个概念。 Combobox 有一个 readOnly 参数,可能会被一些 JS 打开...但是 !
如果你需要一个不需要用户输入的组合框,为什么不使用 the selects by the same library 呢?使用适当的参数,它就像一个组合框一样呈现。
检查Vuetify Guide: Combobox API,有一个prop=type,它设置输入类型(如果你打开浏览器检查器,你会看到 Vuetify 是如何构建组合框的),它的默认值是 'text'。这就是为什么点击软键板时会自动弹出的原因。
一个快速解决方案,将其设置为按钮。 (但潜在的风险是用户不能再手动更改值。特别是你想实现一个可搜索的组合框)
查看下面的演示(或open the codepen in your mobile):
编辑: 通过 CSS 特异性将输入文本左对齐(请查看下面演示中的 CSS 部分)。
new Vue({
el: '#app',
data() {
return {
select: 'Programming',
items: [
'Programming',
'Design',
'Vue',
'Vuetify'
]
}
}
})
.v-menu input[type=button][role=combobox] {
text-align: left;
}
.v-select__slot > input[type=button][role=combobox] {
/*text-align: left; this one works also, you can open browser inspector, then build your own */
}
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/vuetify@1.1.14/dist/vuetify.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/babel-polyfill/dist/polyfill.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.1.14/dist/vuetify.min.js"></script>
<div id="app">
<v-app id="inspire">
<v-container fluid>
<v-layout wrap>
<v-flex xs12>
<v-combobox v-model="select" :items="items" label="Select a favorite activity or create a new one" type="button"></v-combobox>
</v-flex>
<v-flex xs12>
<v-combobox v-model="select" :items="items" chips label="I use chips" type="button"></v-combobox>
</v-flex>
<v-flex xs12>
<v-combobox v-model="select" :items="items" chips label="I use a scoped slot" type="button">
<template slot="selection" slot-scope="data">
<v-chip
:selected="data.selected"
:disabled="data.disabled"
:key="JSON.stringify(data.item)"
class="v-chip--select-multi "
@input="data.parent.selectItem(data.item)"
type="button"
>
<v-avatar class="accent white--text">
{{ data.item.slice(0, 1).toUpperCase() }}
</v-avatar>
{{ data.item }}
</v-chip>
</template>
</v-combobox>
</v-flex>
<v-flex xs12>
<v-combobox v-model="select" chips label="I'm readonly" readonly></v-combobox>
</v-flex>
</v-layout>
</v-container>
</v-app>
</div>
我需要在手机上使用 VuetifyJS combobox。一旦组合框字段被点击,它就会调用软键盘。如何防止触发软键盘? CodePen 示例:https://codepen.io/anon/pen/KxVEea
HTML:
<v-combobox
v-model="select
:items="items"
label="Select an item"
></v-combobox>
JS:
new Vue({
el: '#app',
data () {
return {
select: 'Programming',
items: [
'Programming',
'Design',
'Vue',
'Vuetify'
]
}
}
})
根据this answer using readonly="true"
solve the issue, I found a codePen用更高级的功能来尝试和测试这个概念。 Combobox 有一个 readOnly 参数,可能会被一些 JS 打开...但是 !
如果你需要一个不需要用户输入的组合框,为什么不使用 the selects by the same library 呢?使用适当的参数,它就像一个组合框一样呈现。
检查Vuetify Guide: Combobox API,有一个prop=type,它设置输入类型(如果你打开浏览器检查器,你会看到 Vuetify 是如何构建组合框的),它的默认值是 'text'。这就是为什么点击软键板时会自动弹出的原因。
一个快速解决方案,将其设置为按钮。 (但潜在的风险是用户不能再手动更改值。特别是你想实现一个可搜索的组合框)
查看下面的演示(或open the codepen in your mobile):
编辑: 通过 CSS 特异性将输入文本左对齐(请查看下面演示中的 CSS 部分)。
new Vue({
el: '#app',
data() {
return {
select: 'Programming',
items: [
'Programming',
'Design',
'Vue',
'Vuetify'
]
}
}
})
.v-menu input[type=button][role=combobox] {
text-align: left;
}
.v-select__slot > input[type=button][role=combobox] {
/*text-align: left; this one works also, you can open browser inspector, then build your own */
}
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/vuetify@1.1.14/dist/vuetify.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/babel-polyfill/dist/polyfill.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.1.14/dist/vuetify.min.js"></script>
<div id="app">
<v-app id="inspire">
<v-container fluid>
<v-layout wrap>
<v-flex xs12>
<v-combobox v-model="select" :items="items" label="Select a favorite activity or create a new one" type="button"></v-combobox>
</v-flex>
<v-flex xs12>
<v-combobox v-model="select" :items="items" chips label="I use chips" type="button"></v-combobox>
</v-flex>
<v-flex xs12>
<v-combobox v-model="select" :items="items" chips label="I use a scoped slot" type="button">
<template slot="selection" slot-scope="data">
<v-chip
:selected="data.selected"
:disabled="data.disabled"
:key="JSON.stringify(data.item)"
class="v-chip--select-multi "
@input="data.parent.selectItem(data.item)"
type="button"
>
<v-avatar class="accent white--text">
{{ data.item.slice(0, 1).toUpperCase() }}
</v-avatar>
{{ data.item }}
</v-chip>
</template>
</v-combobox>
</v-flex>
<v-flex xs12>
<v-combobox v-model="select" chips label="I'm readonly" readonly></v-combobox>
</v-flex>
</v-layout>
</v-container>
</v-app>
</div>