Vue.js Textbox with Dropdown component

Vue.js Textbox with Dropdown component

A Textbox with Dropdown allows users to select an input from a drop-down list or type the input value freely. This is a relatively common UI element. It can provide users with alternative options to save operation time, and it can also provide adaptation possibilities for possible minority situations.

I originally thought that this component is quite common and there should be many ready-made examples that can be directly applied. However, after searching around, I found that many similar components have too many functions, such as search, multiple selection, etc. (In short: too complicated!). So I thought I should write a simple and easy-to-use one myself. I would like to thank Mr. Fei for his great help when I was confused.

This UI element will be used in the Common Bar Width App.

Registering Components

Register the global component by copying and pasting the encapsulated component code.

When designing, it was considered that there may be different types of input boxes, such as text input boxes, numeric input boxes, percentage input boxes, etc. Therefore, the inputRule function is used to restrict input in the encapsulated code. The limiting method is to use Regex to filter. If there are other types, you can also modify the filtering conditions in inputRule .

<script type="text/x-template" id="dropdown">
    <div class="dropdown" v-if="options">
        <!-- Dropdown Input -->
        <input :type="type"
                :disabled="disabled"
                v-model="input_value"
                @focus="showOptions()"
                @blur="exit()"
                @keyup="keyMonitor"
                @input="input_value = inputRule(type)" />
...
</script>
<script>
    Vue.component('dropdown', {
        template: '#dropdown',
        props: {
            type: String,
            options: Array,
            disabled: Boolean,
            value: String
        },
...
        methods: {
            inputRule:function(type){
                var value;
                switch(type){
                    case 'text':
                        value = this.input_value.replace(/[^a-zA-Z0-9]/g,'');
                        break;
                    case 'number':
                        value = this.input_value.replace(/^(?![+-]?\d+(\.\d+)?$)/g,'');
                        break;
                    case 'percentage':
                        value = this.input_value.replace(/[^\d]/g,'');
                        value = value > 100 ? '100' : value;
                        value = value < 0 ? '0' : value;
                        break;
                    default:
                        console.log("no limitation");
                }
                return value;
            },
...
</script>

Calling Components

Add a custom label calling component.

<dropdown type = "text"
            :options = "text_options" 
            :value = "text_value"
            :disabled = "text_disabled" 
            @on_change_input_value = "onTextChange">
</dropdown>

Passing Data

Finally, dynamically bind the data to the parent component in props:

  • type: The type of the input box, currently supports text, number and percentage.
  • options: options for the input box drop-down list
  • value: the value of the input box
  • disabled: Whether to prohibit clicking the input box

In addition, we also need to define things in the parent instance to update the value of the input box

on_change_input_value: Update value

data: function () {
    return {
        text_value: 'ccc',
        text_disabled: false,
        text_options: [
            { id: 1, name: 'a' },
            { id: 2, name: 'bb' },
            { id: 3, name: 'ccc' },
            { id: 4, name: 'dddd' },
            { id: 5, name: 'eeeee' },
            { id: 6, name: 'fffff ' },
            { id: 7, name: 'gggggg' },
            { id: 8, name: 'hhhhhhh' },
            { id: 9, name: 'iiiiiiii' },
        ],
        ...
    }
},
...
methods: {
    onTextChange: function (new_text_value) {
        this.text_value = new_text_value;
    },
...
},

source code

GitHub

This is the end of this article about the Vue.js Textbox with Dropdown component. For more information about the Vue.js Textbox with Dropdown component, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Detailed explanation of how to use the Vue.js digital input box component
  • JS imitates Alipay input text input box enlargement component example
  • JavaScript component development: input box plus candidate box
  • JS uses regular expressions to restrict the input box to only allow integers and decimals (amounts or cash) with two decimal places
  • js and jquery real-time monitoring input box value oninput and onpropertychange methods
  • js monitors the instant changes of input box values ​​​​onpropertychange, oninput
  • JS implements the method of popping up an input box on the web page
  • js dynamically modifies the type attribute of the input box (implementation method analysis)
  • js monitors the real-time changes of the input box value
  • JavaScript implements an input box component

<<:  Centos 7.4 server time synchronization configuration method [based on NTP service]

>>:  In-depth understanding of the matching logic of Server and Location in Nginx

Recommend

The homepage design best reflects the level of the web designer

In the many projects I have worked on, there is b...

The use of MySQL triggers and what to pay attention to

Table of contents About Triggers Use of triggers ...

Solution to the Chinese garbled characters problem in MySQL under Ubuntu

Find the problem I have been learning Django rece...

A detailed introduction to the basics of Linux scripting

Table of contents 1. Script vim environment 2. Ho...

Xftp download and installation tutorial (graphic tutorial)

If you want to transfer files between Windows and...

Html to achieve dynamic display of color blocks report effect (example code)

Use HTML color blocks to dynamically display data...

How to solve the problem of automatic package update in Debian system

I don't know when it started, but every time ...

Share 8 MySQL pitfalls that you have to mention

MySQL is easy to install, fast and has rich funct...

Implementation ideas for docker registry image synchronization

Intro Previously, our docker images were stored i...

Implementation of local migration of docker images

I've been learning Docker recently, and I oft...

Detailed tutorial on installing Docker on CentOS 7.5

Introduction to Docker Docker is an open source c...

How to implement HTML Table blank cell completion

When I first taught myself web development, there...

Analysis of examples of using anti-shake and throttling in Vue components

Be careful when listening for events that are tri...

Installation and deployment of MySQL Router

Table of contents 01 Introduction to MySQL Router...