Запретить вызов программной клавиатуры после нажатия поля со списком VuetifyJS

Мне нужно использовать Поле со списком VuetifyJS на мобильном телефоне. Как только поле со списком получает нажатие, оно вызывает экранную клавиатуру. Как предотвратить срабатывание программной клавиатуры? Пример 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'
      ]
    }
  }
})

Почему вы не используете вместо этого v-select? Вероятно, он делает именно то, что вы хотите, из коробки. Вот демонстрация замены v-combo на v-select в вашем Codepen: codepen.io/tony19/pen/bxwdJj

tony19 29.08.2018 02:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
1 925
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Согласно этот ответ, использование readonly = "true" для решения проблемы, я нашел codePen с более продвинутыми функциями, чтобы попробовать и протестировать концепцию. Combobox имеет параметр readOnly и, вероятно, может быть открыт каким-нибудь JS ... но!

Если вам нужно поле со списком без необходимости ввода данных пользователем, почему бы не использовать выбор из той же библиотеки? При правильных параметрах он отображается как поле со списком.

Ответ принят как подходящий

Отметьте Руководство Vuetify: Combobox API, есть одно свойство prop = тип, которое Устанавливает тип ввода (если вы откроете инспектор браузера, вы увидите, как Vuetify создает поле со списком), и его значение по умолчанию - «текст». Вот почему панель функциональных клавиш автоматически всплывает при нажатии на нее.

Одно быстрое решение, установите его на кнопка. (Но потенциальный риск состоит в том, что пользователь больше не может изменять значение вручную. Особенно вам хотелось бы реализовать одно поле со списком с возможностью поиска)

Посмотрите демо ниже (или откройте код в своем мобильном телефоне):

Редактировать: выравнивает вводимый текст по левому краю в соответствии со спецификой 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/[email protected]/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/[email protected]/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>

Отлично работает, но текст теперь выровнен по центру, а не по левому краю. Это не сработало: <v-combobox class = "text-xs-left Есть идеи, как это исправить?

Tom 29.08.2018 21:15

@Tom, проверьте обновленный ответ, он должен соответствовать вашим требованиям.

Sphinx 29.08.2018 22:30

Другие вопросы по теме