DevExtreme v24.1 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

Vue Check Box

When you add the CheckBox component to an application, specify its value property to set its state. The CheckBox can have one of the following states:

  • Checked (value is true).
  • Unchecked (value is false).
  • Indeterminate (value is null or undefined).
DevExtreme Accessibility Compliance
DevExtreme component libraries meet a variety of WCAG and Section 508 compliance standards. To assess this demo’s accessibility level, click the Run AXE® Validation button to launch the AXE® web accessibility evaluation tool.
All trademarks or registered trademarks are property of their respective owners. AXE® Terms of Use
The overall accessibility level of your application depends on the CheckBox features used.
Backend API
<template> <div class="form"> <div class="dx-fieldset"> <div class="dx-field"> <div class="dx-field-label">Checked</div> <div class="dx-field-value"> <DxCheckBox :value="true" :element-attr="checkedLabel" /> </div> </div> <div class="dx-field"> <div class="dx-field-label">Unchecked</div> <div class="dx-field-value"> <DxCheckBox :value="false" :element-attr="unCheckedLabel" /> </div> </div> <div class="dx-field"> <div class="dx-field-label">Indeterminate</div> <div class="dx-field-value"> <DxCheckBox :value="null" :element-attr="indeterminateLabel" /> </div> </div> <div class="dx-field"> <div class="dx-field-label">Three state mode</div> <div class="dx-field-value"> <DxCheckBox :enable-three-state-behavior="true" :value="null" :element-attr="threeStateModeLabel" /> </div> </div> <div class="dx-field"> <div class="dx-field-label">Handle value change</div> <div class="dx-field-value"> <DxCheckBox v-model:value="checkBoxValue" :element-attr="handleValueChangeLabel" /> </div> </div> <div class="dx-field"> <div class="dx-field-label">Disabled</div> <div class="dx-field-value"> <DxCheckBox :disabled="true" :value="checkBoxValue" :element-attr="disabledLabel" /> </div> </div> <div class="dx-field"> <div class="dx-field-label">Custom size</div> <div class="dx-field-value"> <DxCheckBox :value="null" :icon-size="30" :element-attr="customSizeLabel" /> </div> </div> <div class="dx-field"> <div class="dx-field-label">With label</div> <div class="dx-field-value"> <DxCheckBox text="Label" :value="true" /> </div> </div> </div> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; import { DxCheckBox } from 'devextreme-vue/check-box'; const checkBoxValue = ref(null); const checkedLabel = { 'aria-label': 'Checked' }; const unCheckedLabel = { 'aria-label': 'Unchecked' }; const indeterminateLabel = { 'aria-label': 'Indeterminate' }; const threeStateModeLabel = { 'aria-label': 'Three state mode' }; const handleValueChangeLabel = { 'aria-label': 'Handle value change' }; const disabledLabel = { 'aria-label': 'Disabled' }; const customSizeLabel = { 'aria-label': 'Custom size' }; </script>
window.exports = window.exports || {}; window.config = { transpiler: 'plugin-babel', meta: { '*.vue': { loader: 'vue-loader', }, '*.ts': { loader: 'demo-ts-loader', }, '*.svg': { loader: 'svg-loader', }, 'devextreme/time_zone_utils.js': { 'esModule': true, }, 'devextreme/localization.js': { 'esModule': true, }, 'devextreme/viz/palette.js': { 'esModule': true, }, }, paths: { 'root:': '../../../../', 'npm:': 'https://unpkg.com/', }, map: { 'vue': 'npm:vue@3.2.47/dist/vue.esm-browser.js', 'vue-loader': 'npm:dx-systemjs-vue-browser@1.1.1/index.js', 'demo-ts-loader': 'root:utils/demo-ts-loader.js', 'svg-loader': 'root:utils/svg-loader.js', 'mitt': 'npm:mitt/dist/mitt.umd.js', 'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.28.1/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@24.1.7/cjs', 'devextreme-vue': 'npm:devextreme-vue@24.1.7/cjs', 'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.2.13/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.56/dist/dx-gantt.js', '@devextreme/runtime': 'npm:@devextreme/runtime@3.0.13', 'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate@7.4.11/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js', 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js', // Prettier 'prettier/standalone': 'npm:prettier@2.8.8/standalone.js', 'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js', }, packages: { 'devextreme-vue': { main: 'index.js', }, 'devextreme': { defaultExtension: 'js', }, 'devextreme/events/utils': { main: 'index', }, 'devextreme/events': { main: 'index', }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js', }, }, packageConfigPaths: [ 'npm:@devextreme/*/package.json', 'npm:@devextreme/runtime@3.0.13/inferno/package.json', ], babelOptions: { sourceMaps: false, stage0: true, }, }; System.config(window.config);
import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app');
<!DOCTYPE html> <html lang="en"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/24.1.7/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" /> <script type="module"> import * as vueCompilerSFC from "https://unpkg.com/@vue/compiler-sfc@3.4.16/dist/compiler-sfc.esm-browser.js"; window.vueCompilerSFC = vueCompilerSFC; </script> <script src="https://unpkg.com/typescript@4.9.5/lib/typescript.js"></script> <script src="https://unpkg.com/core-js@2.6.12/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import("./index.ts"); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"> </div> </div> </body> </html>

The component supports the three state mode. In this demo, the enableThreeStateBehavior property of the "Three state mode" CheckBox is enabled. You can cycle through the states of this CheckBox in the following order:

Indeterminate → Checked → Unchecked → Indeterminate → ...

To handle value changes, use two-way binding to bind the value property to a component property. The value of the component property depends on the value of the CheckBox. In this demo, the value properties of the "Handle value change" and "Disabled" CheckBox components are bound to the same component property. Click the first CheckBox to see how it affects the second one. You can also use the onValueChanged property to handle value changes. For example, this technique can be useful if you need to use the previous value.

You can use the iconSize property to specify custom dimensions for the CheckBox. To add a label to the CheckBox, set the text property.