Popover Configuration

An object defining configuration options for the dxPopover widget.

animation

An object defining animation options of the widget.

The option takes on the following object by default.

JavaScript
animationOptions = { 
    show: {
        type: "fade",
        from: 0,
        to: 1
    },
    hide: {
        type: "fade",
        to: 0
    }
}
Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div dx-button="{ onClick: togglePopover, text: 'Choose color' }"></div>
    <div dx-popover="{
        width: 200,
        height: 'auto',
        target: '.dx-button',
        bindingOptions: {
            visible: 'visible',
            animation: 'animationConfig'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: togglePopover }"></div>
        </div>
    </div>
    <div class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">Animation type</div>
            <div class="dx-field-value" dx-select-box="{
                items: animationTypes,
                value: 'pop',
                onValueChanged: adjustAnimation
            }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["Red", "Green", "Black"];
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
    $scope.animationTypes = ["pop", "fade", "slide"];
    $scope.animationConfig = {
        show: { type: "pop", from: { opacity: 1, scale: 0 }, to: { scale: 1 } },
        hide: { type: "pop", from: { scale: 1 }, to: { scale: 0 } }
    };
    $scope.adjustAnimation = function (e) {
        switch (e.value) {
            case "slide":
                $scope.animationConfig = {
                    show: { type: "slide", from: { opacity: 1, top: -200 }, to: { top: 0 } },
                    hide: { type: "slide", from: { top: 0 }, to: { top: -200 } }
                };
                break;
            case "pop":
                $scope.animationConfig = {
                    show: { type: "pop", from: { opacity: 1, scale: 0 }, to: { scale: 1 } },
                    hide: { type: "pop", from: { scale: 1 }, to: { scale: 0 } }
                };
                break;
            case "fade":
                $scope.animationConfig = {
                    show: { type: "fade", from: 0, to: 1 },
                    hide: { type: "fade", from: 1, to: 0 }
                };
                break;
            default:
                animationConfig = {};
                break;
        }
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div data-bind="dxButton: { onClick: togglePopover, text: 'Choose color' }"></div>
<div data-bind="dxPopover: {
    width: 200,
    height: 'auto',
    visible: visible,
    target: '.dx-button',
    animation: animationConfig
}">
    <div data-options="dxTemplate: { name: 'content' }">
        <div data-bind="dxList: { dataSource: colors, onItemClick: togglePopover }"></div>
    </div>
</div>
<div class="dx-fieldset">
    <div class="dx-field">
        <div class="dx-field-label">Animation type</div>
        <div class="dx-field-value" data-bind="dxSelectBox: {
            items: animationTypes,
            value: 'pop',
            onValueChanged: adjustAnimation
        }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["Red", "Green", "Black"],
    togglePopover: function () {
        this.visible(!this.visible());
    },
    animationTypes: ["pop", "fade", "slide"],
    animationConfig: ko.observable({
        show: { type: "pop", from: { opacity: 1, scale: 0 }, to: { scale: 1 } },
        hide: { type: "pop", from: { scale: 1 }, to: { scale: 0 } }
    }),
    adjustAnimation: function (e) {
        switch (e.value) {
            case "slide":
                this.animationConfig({
                    show: { type: "slide", from: { opacity: 1, top: -200 }, to: { top: 0 } },
                    hide: { type: "slide", from: { top: 0 }, to: { top: -200 } }
                });
                break;
            case "pop":
                this.animationConfig({
                    show: { type: "pop", from: { opacity: 1, scale: 0 }, to: { scale: 1 } },
                    hide: { type: "pop", from: { scale: 1 }, to: { scale: 0 } }
                });
                break;
            case "fade":
                this.animationConfig({
                    show: { type: "fade", from: 0, to: 1 },
                    hide: { type: "fade", from: 1, to: 0 }
                });
                break;
            default:
                animationConfig({});
                break;
        }
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div id="toggleButton"></div>
<div id="myPopover"></div>
<div class="dx-fieldset">
    <div class="dx-field">
        <div class="dx-field-label">Animation type</div>
        <div class="dx-field-value" id="animationSelector"></div>
    </div>
</div>
$("#myPopover").dxPopover({
    width: 200,
    height: 'auto',
    target: '#toggleButton',
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["Red", "Green", "Black"],
            onItemClick: function () {
                $("#myPopover").dxPopover("instance").hide();
            }
        })
    },
    animation: {
        show: { type: "pop", from: { opacity: 1, scale: 0 }, to: { scale: 1 } },
        hide: { type: "pop", from: { scale: 1 }, to: { scale: 0 } }
    }
});
$("#toggleButton").dxButton({
    text: 'Choose color',
    onClick: function () {
        $("#myPopover").dxPopover("instance").show();
    }
});
$("#animationSelector").dxSelectBox({
    items: ["pop", "fade", "slide"],
    value: "pop",
    onValueChanged: function (e) {
        switch (e.value) {
            case "slide":
                $("#myPopover").dxPopover("instance").option("animation", {
                    show: { type: "slide", from: { opacity: 1, top: -200 }, to: { top: 0 } },
                    hide: { type: "slide", from: { top: 0 }, to: { top: -200 } }
                });
                break;
            case "pop":
                $("#myPopover").dxPopover("instance").option("animation", {
                    show: { type: "pop", from: { opacity: 1, scale: 0 }, to: { scale: 1 } },
                    hide: { type: "pop", from: { scale: 1 }, to: { scale: 0 } }
                });
                break;
            case "fade":
                $("#myPopover").dxPopover("instance").option("animation", {
                    show: { type: "fade", from: 0, to: 1 },
                    hide: { type: "fade", from: 1, to: 0 }
                });
                break;
            default:
                $("#myPopover").dxPopover("instance").option("animation", {});
                break;
        }
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}

buttons

Specifies items displayed on the top or bottom toolbar of the popup window.

Type: Array

This option accepts an array of items that have the same structure as toolbar items. But in addition to toolbar item fields, a buttons array item includes the toolbar field that specifies whether the item is displayed on a top or bottom toolbar. This field accepts the "top" and "bottom" values.

closeOnBackButton

A Boolean value specifying whether or not the widget is closed if a user presses the Back hardware button.

Type: Boolean
Default Value: true

closeOnOutsideClick

A Boolean value specifying whether or not a widget is closed if a user clicks outside of the overlapping window.

Type: Boolean|function
Function parameters:
event: jQuery.Event
Holds the jQuery event caused the widget closing.
Return Value: Boolean
The required option value.
Default Value: true

The function passed to this option enables you to specify a custom condition for widget closing. For instance, you can prevent closing if a user clicks a certain element.

JavaScript
var lookupOptions = {
    . . .,
    closeOnOutsideClick: function(e){
        return e.target !== $("#myElement").get()[0];
    }
}

contentReadyAction

Deprecated

Use the onContentReady option instead.

contentTemplate

A template to be used for rendering widget content.

Type: String|function|DOM Node|jQuery
Function parameters:
contentElement: jQuery
The jQuery object of the widget content element.
Return Value: String|jQuery
A template name or a template container.
Default Value: "content"

This option enables you to render widget contents depending on field values of the bound data model.

HTML
<div data-options="dxTemplate: { name:'myContent' }">
    <h1 data-bind="text: title"></h1>
    <p>Full name: <span data-bind="text: fullName"></span></p>
</div>

NOTE: A binding context of a content template is the bound view model. So, you can bind template elements to the view model's fields directly (see the code above). To access another binding context within a content template, use the Knockout/Angular binding variables.

Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div dx-button="{ onClick: togglePopover, text: 'Choose color' }"></div>
    <div dx-popover="{
        width: 200,
        height: 'auto',
        target: '.dx-button',
        contentTemplate: 'popoverContent',
        bindingOptions: {
            visible: 'visible'
        }
    }">
        <div data-options="dxTemplate: { name: 'popoverContent' }">
            <div dx-list="{ dataSource: colors, onItemClick: chooseColor }"></div>
            <div style="display: inline-block;">Selected color:</div>
            <div class="col-marker" ng-style="{ 'background-color': currentColor }">&nbsp;</div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["red", "green", "blue"];
    $scope.currentColor = "red";
    $scope.chooseColor = function (e) {
        $scope.currentColor = e.itemData;
    };
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
.dx-list{
    margin-bottom: 20px;
}
.col-marker{
    display: inline-block;
    height: 15px;
    width: 15px;
}
<div data-bind="dxButton: { onClick: togglePopover, text: 'Choose color' }"></div>
<div data-bind="dxPopover: {
    width: 200,
    visible: visible,
    target: '.dx-button',
    contentTemplate: 'popoverContent'
}">
    <div data-options="dxTemplate: { name: 'popoverContent' }">
        <div data-bind="dxList: { dataSource: colors, onItemClick: chooseColor }"></div>
        <div style="display: inline-block;">Selected color:</div>
        <div class="col-marker" data-bind="style: { 'background-color': currentColor }">&nbsp;</div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["red", "green", "blue"],
    currentColor: ko.observable("red"),
    chooseColor: function (e) {
        this.currentColor(e.itemData);
    },
    togglePopover: function () {
        this.visible(!this.visible());
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
.dx-list{
    margin-bottom: 20px;
}
.col-marker{
    display: inline-block;
    height: 15px;
    width: 15px;
}
<div id="toggleButton"></div>
<div id="myPopover"></div>
$("#myPopover").dxPopover({
    width: 200,
    height: 'auto',
    target: '#toggleButton',
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["red", "green", "blue"],
            onItemClick: function (e) {
                $(".col-marker").css("background-color", e.itemData);
            }
        });
        contentElement.append("<div style='display: inline-block;'>Selected color:</div> ");
        contentElement.append("<div class='col-marker' style='background-color: red;'>&nbsp;</div>");
    }
});
$("#toggleButton").dxButton({
    text: 'Choose color',
    onClick: function () {
        $("#myPopover").dxPopover("instance").show();
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
.dx-list{
    margin-bottom: 20px;
}
.col-marker{
    display: inline-block;
    height: 15px;
    width: 15px;
}

deferRendering

Specifies whether widget content is rendered when the widget is shown or when rendering the widget.

Type: Boolean
Default Value: true

If this option is set to true, widget content is rendered when showing the widget. Otherwise, widget content is rendered when rendering the widget.

disabled

A Boolean value specifying whether or not the widget can respond to user interaction.

Type: Boolean
Default Value: false

Create an observable variable and assign it to this option to specify the availability of the widget at runtime.

height

Specifies the height of the widget.

Type: Number|String|function
Return Value: Number|String
The widget height.
Default Value: "auto"

The option can hold a value of the following types:

  • number
    The height of the widget in pixels

  • string
    A CSS measurement of the widget height (e.g., "55px", "80%", "auto" and "inherit")

  • function
    A function returning the widget height (e.g., height:function(){ return baseHeight - 10 + "%"; })

hiddenAction

Deprecated

Use the onHidden option instead.

hidingAction

Deprecated

Use the onHiding option instead.

hint

Specifies the text of the hint displayed for the widget.

Type: String
Default Value: undefined

hoverStateEnabled

A Boolean value specifying whether or not the widget changes its state when being hovered by an end user.

Type: Boolean
Default Value: false

onDisposing

A handler for the disposing event.

Type: function
Function parameters:
e: Object
Provides function parameters.
Object structure:
component: Object
Provides access to the widget instance.
element: jQuery
An HTML element of the widget.
model: Object
Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
Default Value: null

onHidden

A handler for the hidden event.

Type: function
Function parameters:
e: Object
Provides function parameters.
Object structure:
component: Object
Provides access to the widget instance.
element: jQuery
An HTML element of the widget.
model: Object
Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
Default Value: null

Assign a function to perform a custom action after the widget is hidden.

Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div dx-button="{ onClick: togglePopover, text: 'Choose color' }"></div>
    <div dx-popover="{
        width: 200,
        height: 'auto',
        target: '.dx-button',
        onShown: popoverShown,
        onHidden: popoverHidden,
        bindingOptions: {
            visible: 'visible'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: togglePopover }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["Red", "Green", "Black"];
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
    $scope.popoverShown = function () {
        DevExpress.ui.notify("Popover is shown", "success");
    };
    $scope.popoverHidden = function () {
        DevExpress.ui.notify("Popover is hidden", "error");
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div data-bind="dxButton: { onClick: togglePopover, text: 'Choose color' }"></div>
<div data-bind="dxPopover: {
    width: 200,
    height: 'auto',
    visible: visible,
    target: '.dx-button',
    onShown: popoverShown,
    onHidden: popoverHidden
}">
    <div data-options="dxTemplate: {name: 'content'}">
        <div data-bind="dxList: { dataSource: colors, onItemClick: togglePopover }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["Red", "Green", "Black"],
    togglePopover: function () {
        this.visible(!this.visible());
    },
    popoverShown: function () {
        DevExpress.ui.notify("Popover is shown", "success");
    },
    popoverHidden: function () {
        DevExpress.ui.notify("Popover is hidden", "error");
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div id="toggleButton"></div>
<div id="myPopover"></div>
$("#myPopover").dxPopover({
    width: 200,
    height: 'auto',
    target: '#toggleButton',
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["Red", "Green", "Black"],
            onItemClick: function () {
                $("#myPopover").dxPopover("instance").hide();
            }
        })
    },
    onShown: function () {
        DevExpress.ui.notify("Popover is shown", "success");
    },
    onHidden: function () {
        DevExpress.ui.notify("Popover is hidden", "error");
    }
});
$("#toggleButton").dxButton({
    text: 'Choose color',
    onClick: function () {
        $("#myPopover").dxPopover("instance").show();
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}

onHiding

A handler for the hiding event.

Type: function
Function parameters:
e: Object
Provides function parameters.
Object structure:
component: Object
Provides access to the widget instance.
element: jQuery
An HTML element of the widget.
model: Object
Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
cancel: Boolean
Indicates whether to cancel hiding the overlay.
Default Value: null

Assign a function to perform a custom action before hiding the widget.

Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div dx-button="{ onClick: togglePopover, text: 'Choose color' }"></div>
    <div dx-popover="{
        width: 200,
        height: 'auto',
        target: '.dx-button',
        onShowing: popoverShowing,
        onHiding: popoverHiding,
        bindingOptions: {
            visible: 'visible'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: togglePopover }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["Red", "Green", "Black"];
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
    $scope.popoverShowing = function () {
        DevExpress.ui.notify("Popover is being shown now", "success");
    };
    $scope.popoverHiding = function () {
        DevExpress.ui.notify("Popover is being hidden now", "error");
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div data-bind="dxButton: { onClick: togglePopover, text: 'Choose color' }"></div>
<div data-bind="dxPopover: {
    width: 200,
    height: 'auto',
    visible: visible,
    target: '.dx-button',
    onShowing: popoverShowing,
    onHiding: popoverHiding
}">
    <div data-options="dxTemplate: {name: 'content'}">
        <div data-bind="dxList: { dataSource: colors, onItemClick: togglePopover }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["Red", "Green", "Black"],
    togglePopover: function () {
        this.visible(!this.visible());
    },
    popoverShowing: function () {
        DevExpress.ui.notify("Popover is being shown now", "success");
    },
    popoverHiding: function () {
        DevExpress.ui.notify("Popover is being hidden now", "error");
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div id="toggleButton"></div>
<div id="myPopover"></div>
$("#myPopover").dxPopover({
    width: 200,
    height: 'auto',
    target: '#toggleButton',
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["Red", "Green", "Black"],
            onItemClick: function () {
                $("#myPopover").dxPopover("instance").hide();
            }
        })
    },
    onShowing: function () {
        DevExpress.ui.notify("Popover is being shown now", "success");
    },
    onHiding: function () {
        DevExpress.ui.notify("Popover is being hidden now", "error");
    }
});
$("#toggleButton").dxButton({
    text: 'Choose color',
    onClick: function () {
        $("#myPopover").dxPopover("instance").show();
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}

onInitialized

A handler for the initialized event.

Type: function
Function parameters:
e: Object
Provides function parameters.
Object structure:
component: Object
Provides access to the widget instance.
element: jQuery
An HTML element of the widget.
Default Value: null

Assign a function to perform a custom action when the widget is initialized.

onOptionChanged

A handler for the optionChanged event.

Type: function
Function parameters:
e: Object
Provides function parameters.
Object structure:
component: Object
Provides access to the widget instance.
name: String
Specifies the name of the option whose value is changed.
fullName: String
Specifies a full name of the option whose value is changed. The full name is formed by concatenating the names of the options that are presented in the hierarchy of the given option. The names are delimited by commas.
value: any
Specifies a new value for the option.
element: jQuery
An HTML element of the widget.
model: Object
Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
Default Value: null

Assign a function to perform a custom action after an option of the component is changed.

onShowing

A handler for the showing event.

Type: function
Function parameters:
e: Object
Provides function parameters.
Object structure:
component: Object
Provides access to the widget instance.
element: jQuery
An HTML element of the widget.
model: Object
Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
Default Value: null

Assign a function to perform a custom action before showing the widget.

Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div dx-button="{ onClick: togglePopover, text: 'Choose color' }"></div>
    <div dx-popover="{
        width: 200,
        height: 'auto',
        target: '.dx-button',
        onShowing: popoverShowing,
        onHiding: popoverHiding,
        bindingOptions: {
            visible: 'visible'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: togglePopover }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["Red", "Green", "Black"];
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
    $scope.popoverShowing = function () {
        DevExpress.ui.notify("Popover is being shown now", "success");
    };
    $scope.popoverHiding = function () {
        DevExpress.ui.notify("Popover is being hidden now", "error");
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div data-bind="dxButton: { onClick: togglePopover, text: 'Choose color' }"></div>
<div data-bind="dxPopover: {
    width: 200,
    height: 'auto',
    visible: visible,
    target: '.dx-button',
    onShowing: popoverShowing,
    onHiding: popoverHiding
}">
    <div data-options="dxTemplate: {name: 'content'}">
        <div data-bind="dxList: { dataSource: colors, onItemClick: togglePopover }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["Red", "Green", "Black"],
    togglePopover: function () {
        this.visible(!this.visible());
    },
    popoverShowing: function () {
        DevExpress.ui.notify("Popover is being shown now", "success");
    },
    popoverHiding: function () {
        DevExpress.ui.notify("Popover is being hidden now", "error");
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div id="toggleButton"></div>
<div id="myPopover"></div>
$("#myPopover").dxPopover({
    width: 200,
    height: 'auto',
    target: '#toggleButton',
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["Red", "Green", "Black"],
            onItemClick: function () {
                $("#myPopover").dxPopover("instance").hide();
            }
        })
    },
    onShowing: function () {
        DevExpress.ui.notify("Popover is being shown now", "success");
    },
    onHiding: function () {
        DevExpress.ui.notify("Popover is being hidden now", "error");
    }
});
$("#toggleButton").dxButton({
    text: 'Choose color',
    onClick: function () {
        $("#myPopover").dxPopover("instance").show();
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}

onShown

A handler for the shown event.

Type: function
Function parameters:
e: Object
Provides function parameters.
Object structure:
component: Object
Provides access to the widget instance.
element: jQuery
An HTML element of the widget.
model: Object
Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
Default Value: null

Assign a function to perform a custom action after the widget is shown.

Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div dx-button="{ onClick: togglePopover, text: 'Choose color' }"></div>
    <div dx-popover="{
        width: 200,
        height: 'auto',
        target: '.dx-button',
        onShown: popoverShown,
        onHidden: popoverHidden,
        bindingOptions: {
            visible: 'visible'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: togglePopover }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["Red", "Green", "Black"];
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
    $scope.popoverShown = function () {
        DevExpress.ui.notify("Popover is shown", "success");
    };
    $scope.popoverHidden = function () {
        DevExpress.ui.notify("Popover is hidden", "error");
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div data-bind="dxButton: { onClick: togglePopover, text: 'Choose color' }"></div>
<div data-bind="dxPopover: {
    width: 200,
    height: 'auto',
    visible: visible,
    target: '.dx-button',
    onShown: popoverShown,
    onHidden: popoverHidden
}">
    <div data-options="dxTemplate: {name: 'content'}">
        <div data-bind="dxList: { dataSource: colors, onItemClick: togglePopover }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["Red", "Green", "Black"],
    togglePopover: function () {
        this.visible(!this.visible());
    },
    popoverShown: function () {
        DevExpress.ui.notify("Popover is shown", "success");
    },
    popoverHidden: function () {
        DevExpress.ui.notify("Popover is hidden", "error");
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div id="toggleButton"></div>
<div id="myPopover"></div>
$("#myPopover").dxPopover({
    width: 200,
    height: 'auto',
    target: '#toggleButton',
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["Red", "Green", "Black"],
            onItemClick: function () {
                $("#myPopover").dxPopover("instance").hide();
            }
        })
    },
    onShown: function () {
        DevExpress.ui.notify("Popover is shown", "success");
    },
    onHidden: function () {
        DevExpress.ui.notify("Popover is hidden", "error");
    }
});
$("#toggleButton").dxButton({
    text: 'Choose color',
    onClick: function () {
        $("#myPopover").dxPopover("instance").show();
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}

onTitleRendered

A handler for the titleRendered event.

Type: function
Function parameters:
e: Object
Provides function parameters.
Object structure:
titleElement: jQuery
The HTML element of the item title.
element: jQuery
An HTML element of the widget.
model: Object
Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
Default Value: null

Assign a function to perform a custom action after a collection item title is rendered.

position

An object defining widget positioning options.

Type: String|position configuration
Default Value: 'bottom'
Accepted Values: 'top'|'bottom'|'left'|'right'

Besides the position configuration object, the option can take on the following string values, which are shortcuts for the corresponding position configuration.

  • 'top' - places the popover over the target element
  • 'bottom' - places the popover under the target element
  • 'left' - places the popover to the left of the target element
  • 'right' - places the popover to the right of the target element
Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div class="target" ng-click="togglePopover()" ng-style="{ 'background-color': currentColor }">&nbsp;</div>
    <p>Click the square.</p>
    <div dx-popover="{
        width: 100,
        target: '.target',
        bindingOptions: {
            visible: 'visible',
            position: 'currentPosition'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: chooseColor }"></div>
        </div>
    </div>
    <div class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">position</div>
            <div class="dx-field-value" dx-select-box="{
                items: positionValues,
                bindingOptions: {
                    value: 'currentPosition'
                }
            }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["red", "green", "blue"];
    $scope.currentColor = "red";
    $scope.positionValues = ["bottom", "top", "left", "right"];
    $scope.currentPosition = "bottom";
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
    $scope.chooseColor = function (e) {
        $scope.currentColor = e.itemData;
        $scope.togglePopover();
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-overlay-content{
    padding: 0 !important;
}
.dx-list-item-content{
    padding: 10px 0 10px 0;
}
.target{
    margin: 180px 0 50px 0;
    display: inline-block;
    height: 50px;
    width: 50px;
    border: solid 1px grey;
}
<div class="target" data-bind="event: { click: togglePopover }, style: { 'background-color': currentColor }">&nbsp;</div>
<p>Click the square.</p>
<div data-bind="dxPopover: {
    width: 100,
    visible: visible,
    target: '.target',
    position: currentPosition
}">
    <div data-options="dxTemplate: { name: 'content' }">
        <div data-bind="dxList: { dataSource: colors, onItemClick: chooseColor }"></div>
    </div>
</div>
<div class="dx-fieldset">
    <div class="dx-field">
        <div class="dx-field-label">position</div>
        <div class="dx-field-value" data-bind="dxSelectBox: {
            items: positionValues,
            value: currentPosition
        }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["red", "green", "blue"],
    currentColor: ko.observable("red"),
    positionValues: ["bottom", "top", "left", "right"],
    currentPosition: ko.observable("bottom"),
    togglePopover: function () {
        this.visible(!this.visible());
    },
    chooseColor: function (e) {
        this.currentColor(e.itemData);
        this.togglePopover();
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-overlay-content{
    padding: 0 !important;
}
.dx-list-item-content{
    padding: 10px 0 10px 0;
}
.target{
    margin: 180px 0 50px 0;
    display: inline-block;
    height: 50px;
    width: 50px;
    border: solid 1px grey;
}
<div class="target" id="targetElement" style="background-color:red;">&nbsp;</div>
<p>Click the square.</p>
<div id="myPopover"></div>
<div class="dx-fieldset">
    <div class="dx-field">
        <div class="dx-field-label">position</div>
        <div class="dx-field-value" id="positionSelector"></div>
    </div>
</div>
$("#myPopover").dxPopover({
    width: 100,
    target: '.target',
    position: "bottom",
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["red", "green", "blue"],
            onItemClick: function (e) {
                $(".target").css("background-color", e.itemData);
                $("#myPopover").dxPopover("instance").hide();
            }
        })
    }
});
$("#targetElement").click(function(){
    $("#myPopover").dxPopover("instance").show();
});
$("#positionSelector").dxSelectBox({
    items: ["bottom", "top", "left", "right"],
    value: "bottom",
    onValueChanged: function (e) {
        $("#myPopover").dxPopover("instance").option("position", e.value);
    }
});
body{
    text-align: center;
}
.dx-overlay-content{
    padding: 0 !important;
}
.dx-list-item-content{
    padding: 10px 0 10px 0;
}
.target{
    margin: 180px 0 50px 0;
    display: inline-block;
    height: 50px;
    width: 50px;
    border: solid 1px grey;
}

rtlEnabled

Specifies whether or not the current component supports a right-to-left representation.

Type: Boolean
Default Value: false

If you need to switch the display of this DevExtreme component to right-to-left, enable a specifically designed configuration option - rtlEnabled. When this option is set to true, the text flows from right to left, and the layout the component's elements is reversed. To switch the entire application/site to a right-to-left representation, use the static DevExpress.rtlEnabled field.

shading

A Boolean value specifying whether or not the main screen is inactive while the widget is active.

Type: Boolean
Default Value: false

Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div dx-button="{ onClick: togglePopover, text: 'Choose color' }"></div>
    <div dx-popover="{
        width: 200,
        target: '.dx-button',
        bindingOptions: {
            visible: 'visible',
            shading: 'shadeScreen'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: togglePopover }"></div>
        </div>
    </div>
    <div class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">shading</div>
            <div class="dx-field-value" dx-switch="{
                bindingOptions: {
                    value: 'shadeScreen'
                }
            }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["Red", "Green", "Black"];
    $scope.shadeScreen = false;
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div data-bind="dxButton: { onClick: togglePopover, text: 'Choose color' }"></div>
<div data-bind="dxPopover: {
    width: 200,
    visible: visible,
    target: '.dx-button',
    shading: shadeScreen
}">
    <div data-options="dxTemplate: { name: 'content' }">
        <div data-bind="dxList: { dataSource: colors, onItemClick: togglePopover }"></div>
    </div>
</div>
<div class="dx-fieldset">
    <div class="dx-field">
        <div class="dx-field-label">shading</div>
        <div class="dx-field-value" data-bind="dxSwitch: {
            value: shadeScreen
        }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["Red", "Green", "Black"],
    shadeScreen: ko.observable(false),
    togglePopover: function () {
        this.visible(!this.visible());
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div id="toggleButton"></div>
<div id="myPopover"></div>
<div class="dx-fieldset">
    <div class="dx-field">
        <div class="dx-field-label">shading</div>
        <div class="dx-field-value" id="shadingSelector"></div>
    </div>
</div>
$("#myPopover").dxPopover({
    width: 200,
    target: '#toggleButton',
    shading: false,
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["Red", "Green", "Black"],
            onItemClick: function () {
                $("#myPopover").dxPopover("instance").hide();
            }
        })
    }
});
$("#toggleButton").dxButton({
    text: 'Choose color',
    onClick: function () {
        $("#myPopover").dxPopover("instance").show();
    }
});
$("#shadingSelector").dxSwitch({
    value: false,
    onValueChanged: function (e) {
        $("#myPopover").dxPopover("instance").option("shading", e.value);
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}

shadingColor

Specifies the shading color.

Type: String
Default Value: ''

This option makes sense only if the shading option is set to true.

showCloseButton

Specifies whether or not the widget displays the Close button.

Type: Boolean
Default Value: false
Default for desktop: true

NOTE: The option makes sense only if the showTitle option is set to true.

showingAction

Deprecated

Use the onShowing option instead.

shownAction

Deprecated

Use the onShown option instead.

showTitle

A Boolean value specifying whether or not to display the title in the overlay window.

Type: Boolean
Default Value: false

target

The target element associated with a popover.

Specify this option to indicate the element for which the popover will be invoked. This option can take on one of the following values.

JavaScript
//CSS selector
target: '#targetElement';

//jQuery wrapper
target: $('#targetElement');

//DOM element
target: document.getElementById('targetElement');

To align the popover near this element, use the position option.

Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div id="button" dx-button="{ text: 'Choose square color', onClick: togglePopover }"></div>
    <div id="square" ng-style="{ 'background-color': currentColor }">&nbsp;</div>
    <p>Click the square.</p>
    <div dx-popover="{
        width: 200,
        target: '.target',
        bindingOptions: {
            visible: 'visible',
            target: 'currentTarget'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: chooseColor }"></div>
        </div>
    </div>
    <div class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">target</div>
            <div class="dx-field-value" dx-select-box="{
                items: targets,
                bindingOptions: {
                    value: 'currentTarget'
                }
            }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["red", "green", "blue"];
    $scope.currentColor = "red";
    $scope.targets = ["#button", "#square"];
    $scope.currentTarget = "#button";
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
    $scope.chooseColor = function (e) {
        $scope.currentColor = e.itemData;
        $scope.togglePopover();
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 20px;
}
#square{
    margin: 30px auto 50px auto;
    display: block;
    height: 50px;
    width: 50px;
    border: solid 1px grey;
}
<div id="button" data-bind="dxButton: {text: 'Choose square color', onClick: togglePopover }"></div>
<div id="square" data-bind="style: { 'background-color': currentColor }">&nbsp;</div>
<div data-bind="dxPopover: {
    width: 200,
    visible: visible,
    target: currentTarget
}">
    <div data-options="dxTemplate: { name: 'content' }">
        <div data-bind="dxList: { dataSource: colors, onItemClick: chooseColor }"></div>
    </div>
</div>
<div class="dx-fieldset">
    <div class="dx-field">
        <div class="dx-field-label">target</div>
        <div class="dx-field-value" data-bind="dxSelectBox: {
            items: targets,
            value: currentTarget
        }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["red", "green", "blue"],
    currentColor: ko.observable("red"),
    targets: ["#button", "#square"],
    currentTarget: ko.observable("#button"),
    togglePopover: function () {
        this.visible(!this.visible());
    },
    chooseColor: function (e) {
        this.currentColor(e.itemData);
        this.togglePopover();
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 20px;
}
#square{
    margin: 30px auto 50px auto;
    display: block;
    height: 50px;
    width: 50px;
    border: solid 1px grey;
}
<div id="button"></div>
<div id="square" style="background-color:red;">&nbsp;</div>
<div id="myPopover"></div>
<div class="dx-fieldset">
    <div class="dx-field">
        <div class="dx-field-label">target</div>
        <div class="dx-field-value" id="targetSelector"></div>
    </div>
</div>
$("#myPopover").dxPopover({
    width: 200,
    target: '#button',
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["red", "green", "blue"],
            onItemClick: function (e) {
                $("#square").css("background-color", e.itemData);
                $("#myPopover").dxPopover("instance").hide();
            }
        })
    }
});
$("#button").dxButton({
    text: "Choose square color",
    onClick: function () {
        $("#myPopover").dxPopover("instance").show();
    }
});
$("#targetSelector").dxSelectBox({
    items: ["#button", "#square"],
    value: "#button",
    onValueChanged: function (e) {
        $("#myPopover").dxPopover("instance").option("target", e.value);
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 20px;
}
#square{
    margin: 30px auto 50px auto;
    display: block;
    height: 50px;
    width: 50px;
    border: solid 1px grey;
}

title

The title in the overlay window.

Type: String
Default Value: ""

NOTE: If the title option is specified, the titleTemplate option value is ignored.

titleTemplate

A template to be used for rendering the widget title.

Type: String|function|DOM Node|jQuery
Function parameters:
titleElement: jQuery
An HTML element containing the rendered title.
Return Value: String|DOM Node|jQuery
A template name or a template container.
Default Value: "title"

This option enables you to render the widget title depending on field values of the bound data model.

HTML
<div data-options="dxTemplate: { name:'myTitle' }">
    <h3><span data-bind="text: title"></span> info</h3>
</div>

NOTE: A binding context of a title template is the bound view model. So, you can bind template elements to the view model's fields directly (see the code above). To access another binding context within a title template, use the Knockout/Angular binding variables.

NOTE: The titleTemplate option makes sense if the title option is undefined.

visible

A Boolean value specifying whether or not the widget is visible.

Type: Boolean
Default Value: false

You can show and hide the widget by changing the value of an observable variable passed to this option.

Show Example:
AngularJS
Knockout
jQuery
<div ng-controller="demoController" style="height: 100%;">
    <div dx-button="{ onClick: togglePopover, text: 'Choose color' }"></div>
    <div dx-popover="{
        width: 200,
        height: 'auto',
        target: '.dx-button',
        bindingOptions: {
            visible: 'visible'
        }
    }">
        <div data-options="dxTemplate: { name: 'content' }">
            <div dx-list="{ dataSource: colors, onItemClick: togglePopover }"></div>
        </div>
    </div>
</div>
var myApp = angular.module('myApp', ['dx']);
myApp.controller("demoController", function ($scope) {
    $scope.visible = false;
    $scope.colors = ["Red", "Green", "Black"];
    $scope.togglePopover = function () {
        $scope.visible = !$scope.visible;
    };
});
angular.element(document).ready(function () {
    angular.bootstrap(document, ['myApp']);
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div data-bind="dxButton: { onClick: togglePopover, text: 'Choose color' }"></div>
<div data-bind="dxPopover: {
    width: 200,
    height: 'auto',
    visible: visible,
    target: '.dx-button'
}">
    <div data-options="dxTemplate: {name: 'content'}">
        <div data-bind="dxList: { dataSource: colors, onItemClick: togglePopover }"></div>
    </div>
</div>
var myViewModel = {
    visible: ko.observable(false),
    colors: ["Red", "Green", "Black"],
    togglePopover: function () {
        this.visible(!this.visible());
    }
}
ko.applyBindings(myViewModel);
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}
<div id="toggleButton"></div>
<div id="myPopover"></div>
$("#myPopover").dxPopover({
    width: 200,
    height: 'auto',
    target: '#toggleButton',
    contentTemplate: function (contentElement) {
        var list = $("<div>");
        contentElement.append(list);
        list.dxList({
            dataSource: ["Red", "Green", "Black"],
            onItemClick: function () {
                $("#myPopover").dxPopover("instance").option("visible", false);
            }
        })
    }
});
$("#toggleButton").dxButton({
    text: 'Choose color',
    onClick: function () {
        $("#myPopover").dxPopover("instance").option("visible", true);
    }
});
body{
    text-align: center;
}
.dx-button{
    margin: 10px;
}

width

Specifies the width of the widget.

Type: Number|String|function
Return Value: Number|String
The widget width.
Default Value: "auto"

The option can hold a value of the following types.

  • numeric - the widget width in pixels
  • string - a CSS measurement of the widget width (e.g., "55px", "80%", "auto" and "inherit")
  • function - the function returning the widget width (e.g., width:function(){ return baseWidth - 10 + "%"; })