In Development
Last Updated: 05 Nov 2026 13:49 by ADMIN

Product: Kendo UI for jQuery — TreeList (also related Grid issues below)
Version: 2026.2.520 (2026 Q2), jQuery 3.5.1
Browser / AT: Google Chrome 155 (Windows 11) with NVDA (latest)
Severity: Accessibility (WCAG 2.2 SC 1.3.1 Info and Relationships)

Summary
In a TreeList that has a locked column, NVDA announces the locked column's header instead of the current column's header when keyboard focus moves to a cell in the scrollable part.

A Grid with the same layout (locked column + scrollable columns + hidden columns) is announced correctly, so the problem seems specific to how the TreeList builds its accessible table (`role="treegrid"` with rows assembled through `aria-owns`).

Here is a Dojo showing the issue: https://dojo.telerik.com/QYJCWJUj

Steps to reproduce
1. Create a TreeList with `navigatable: true`, one or more locked columns (including a hidden locked column) and several unlocked columns (sample here).
2. Open it in Chrome with NVDA running.
3. Click a cell in the first unlocked column ("April"), or Tab into the TreeList and use the arrow keys to reach it.

Expected
NVDA announces the cell, its row and its own column header, e.g.:
`0 / 8, row 2, April, column 2`

Actual
NVDA announces the locked column's header and wrong column number:
`0 / 8  April  row 2  Hierarchy  column 4`

Sample
<div id="treelist"></div>
<script>
  $("#treelist").kendoTreeList({
    navigatable: true,
    height: 300,
    dataSource: {
      data: [
        { id: 1, parentId: null, name: "Region A", apr: "0 / 8", may: "1 / 8", jun: "2 / 8", jul: "3 / 8" },
        { id: 2, parentId: 1, name: "Store 1", apr: "0 / 2", may: "1 / 2", jun: "2 / 2", jul: "2 / 2" }
      ],
      schema: { model: { id: "id", parentId: "parentId", expanded: true } }
    },
    columns: [
      { field: "id", title: "Id", hidden: true, locked: true, width: 80 },
      { field: "name", title: "Hierarchy", locked: true, width: 220 },
      { field: "mar", title: "March", hidden: true, width: 120 },
      { field: "apr", title: "April", width: 120 },
      { field: "may", title: "May", width: 120 },
      { field: "jun", title: "June", width: 120 },
      { field: "jul", title: "July", width: 120 }
    ]
  });
</script>

Moving right through the unlocked columns keeps announcing "Hierarchy" as the column header. The correct header is only heard because each cell's `aria-describedby` points to its header cell.

What we checked in the DOM
- The `role="treegrid"` table owns the `thead` and `tbody` row groups (`aria-owns`).
- The header row and every data row each own the same number of cells (locked cells first, then scrollable cells) in the same order. No element is owned twice.


In Development
Last Updated: 04 Nov 2026 07:53 by ADMIN

Kendo grid in version  2026.3.811 moves scroll to start when navigatable: true in RTL. It makes impossible to edit. 
Same setting in version 2025.3.812 works well.

Same grid configuration with different kendo version dojo:

dojo with scroll jump 2026.3.811

dojo normal work 2025.3.812


<!DOCTYPE html>
<html>
<head>
    <base href="https://demos.telerik.com/kendo-ui/grid/right-to-left-support">
    <style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style>
    <title></title>
    <link href="https://kendo.cdn.telerik.com/themes/14.6.1/meridian/meridian-main.css" rel="stylesheet" />
    <script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
    
    
    
    <script src="https://kendo.cdn.telerik.com/2026.3.1015/js/kendo.all.min.js"></script>
    
    
</head>
<body>
    <script src="../content/shared/js/products.js"></script>

<div id="example">
    <div class="k-rtl">
        <div id="grid"></div>
    </div>

    <script>
      	const columns = [
    {
        "title": " ",
        "field": "IS_CHECKED",
        "type": "string",
        "width": 45
    },
    {
        "title": " ",
        "field": "IS_PERIOD_LOCKED",
        "type": "string",
        "width": 100
    },
    {
        "title": " ",
        "field": "HAS_COPY_ROW",
        "type": "number",
        "width": 45
    },
    {
        "title": "STATUS_VAL",
        "field": "STATUS_VAL",
        "type": "string",
        "width": 45
    },
    {
        "title": "קוד עובד",
        "field": "CHANNEL_CODE",
        "type": "string",
        "width": "155px"
    },
    {
        "title": "שם העובד",
        "field": "CHANNEL_NAME",
        "type": "string",
        "width": "155px"
    },
    {
        "title": "Sales Type",
        "field": "FLEX1",
        "type": "string",
        "width": "135px"
    },
    {
        "title": "Amount",
        "field": "QUANTITY",
        "type": "number",
        "width": "120px"
    },
    {
        "title": "Amount Type",
        "field": "FLEX4",
        "type": "string",
        "width": "145px"
    },
    {
        "title": "FOP",
        "field": "FLEX5",
        "type": "string",
        "width": "120px"
    },
    {
        "title": "Product",
        "field": "FLEX6",
        "type": "string",
        "width": "120px"
    },
    {
        "title": "Customer Type",
        "field": "FLEX7",
        "type": "string",
        "width": "165px"
    },
    {
        "title": "Customer",
        "field": "FLEX8",
        "type": "string",
        "width": "115px"
    },
    {
        "title": "Order Date",
        "field": "FLEX9",
        "type": "string",
        "width": "135px"
    },
    {
        "title": "file row",
        "field": "FILE_ROW_NUMBER",
        "type": "string",
        "width": "115px"
    },
    {
        "title": "file name",
        "field": "FILE_NAME",
        "type": "string",
        "width": "125px"
    },
    {
        "title": "דשגשדג",
        "field": "FLEX135",
        "type": "string",
        "width": "120px"
    },
    {
        "title": "lov search",
        "field": "FLEX2",
        "type": "string",
        "width": "135px"
    },
    {
        "title": "Date field",
        "field": "FLEX10",
        "type": "date",
        "width": "135px"
    },
    {
        "title": "steve",
        "field": "FLEX55",
        "type": "string",
        "width": "120px"
    },
    {
        "title": "My file",
        "field": "FLEX15",
        "type": "string",
        "width": "120px"
    },
    {
        "title": "Approval Description",
        "field": "APPROVAL_DESC",
        "type": "string",
        "width": "235px"
    },
    {
        "title": "Approval Status",
        "field": "APPROVAL_STATUS",
        "type": "string",
        "width": "185px"
    },
    {
        "title": "CheckCFLEX",
        "field": "CFLEX116",
        "type": "boolean",
        "width": "135px"
    },
    {
        "title": "BBBBBBBB123",
        "field": "CFLEX117",
        "type": "string",
        "width": "145px"
    },
    {
        "title": "aaa",
        "field": "CFLEX54",
        "type": "string",
        "width": "120px"
    },
    {
        "title": "AAAAAAA123",
        "field": "CFLEX3",
        "type": "string",
        "width": "135px"
    },
    {
        "title": "Creation date -CF",
        "field": "CFLEX26",
        "type": "date",
        "width": "205px"
    }
];
      	const data = [
    {
        "IS_PERIOD_LOCKED": "N",
        "HAS_COPY_ROW": 7,
        "STATUS_VAL": "",
        "CHANNEL_CODE": "GS100",
        "CHANNEL_NAME": "GS100",
        "FLEX1": "",
        "QUANTITY": 542.8,
        "FLEX4": "454646",
        "FLEX5": "",
        "FLEX6": "AAAA",
        "FLEX7": "",
        "FLEX8": "reerwe",
        "FLEX9": "g",
        "FILE_ROW_NUMBER": "",
        "FILE_NAME": "",
        "FLEX135": "",
        "FLEX2": "",
        "FLEX10": null,
        "FLEX55": "",
        "FLEX15": "245",
        "APPROVAL_DESC": "The text for REJECTION 2",
        "APPROVAL_STATUS": "N",
        "CFLEX116": false,
        "CFLEX117": "",
        "CFLEX54": "",
        "CFLEX3": "",
        "CFLEX26": null
    },
    {
        "IS_PERIOD_LOCKED": "N",
        "HAS_COPY_ROW": 2,
        "STATUS_VAL": "",
        "CHANNEL_CODE": "GS105",
        "CHANNEL_NAME": "GS105",
        "FLEX1": "",
        "QUANTITY": 542.8,
        "FLEX4": "454646",
        "FLEX5": "",
        "FLEX6": "AAAA",
        "FLEX7": "",
        "FLEX8": "reerwe",
        "FLEX9": "g",
        "FILE_ROW_NUMBER": "",
        "FILE_NAME": "",
        "FLEX135": "",
        "FLEX2": "",
        "FLEX10": null,
        "FLEX55": "",
        "FLEX15": "240",
        "APPROVAL_DESC": "The text for approval",
        "APPROVAL_STATUS": "Y",
        "CFLEX116": false,
        "CFLEX117": "",
        "CFLEX54": "",
        "CFLEX3": "",
        "CFLEX26": null
    },
    {
        "IS_PERIOD_LOCKED": "N",
        "HAS_COPY_ROW": 6,
        "STATUS_VAL": "",
        "CHANNEL_CODE": "GS106",
        "CHANNEL_NAME": "GS106",
        "FLEX1": "",
        "QUANTITY": 142.8,
        "FLEX4": "454646",
        "FLEX5": "",
        "FLEX6": "BBBB",
        "FLEX7": "",
        "FLEX8": "reerwe",
        "FLEX9": "g",
        "FILE_ROW_NUMBER": "",
        "FILE_NAME": "",
        "FLEX135": "",
        "FLEX2": "",
        "FLEX10": null,
        "FLEX55": "",
        "FLEX15": "242",
        "APPROVAL_DESC": "The text for approval",
        "APPROVAL_STATUS": "Y",
        "CFLEX116": false,
        "CFLEX117": "",
        "CFLEX54": "",
        "CFLEX3": "",
        "CFLEX26": null
    },
    {
        "IS_PERIOD_LOCKED": "N",
        "HAS_COPY_ROW": 3,
        "STATUS_VAL": "",
        "CHANNEL_CODE": "GS107",
        "CHANNEL_NAME": "GS107",
        "FLEX1": "",
        "QUANTITY": 542.8,
        "FLEX4": "454646",
        "FLEX5": "",
        "FLEX6": "AAAA",
        "FLEX7": "",
        "FLEX8": "reerwe",
        "FLEX9": "g",
        "FILE_ROW_NUMBER": "",
        "FILE_NAME": "",
        "FLEX135": "",
        "FLEX2": "",
        "FLEX10": null,
        "FLEX55": "",
        "FLEX15": "241",
        "APPROVAL_DESC": "The text for approval",
        "APPROVAL_STATUS": "Y",
        "CFLEX116": false,
        "CFLEX117": "",
        "CFLEX54": "",
        "CFLEX3": "",
        "CFLEX26": null
    },
    {
        "IS_PERIOD_LOCKED": "N",
        "HAS_COPY_ROW": 5,
        "STATUS_VAL": "",
        "CHANNEL_CODE": "GS100",
        "CHANNEL_NAME": "GS100",
        "FLEX1": "",
        "QUANTITY": 600,
        "FLEX4": "454646",
        "FLEX5": "",
        "FLEX6": "BBBB",
        "FLEX7": "",
        "FLEX8": "reerwe",
        "FLEX9": "g",
        "FILE_ROW_NUMBER": "",
        "FILE_NAME": "",
        "FLEX135": "",
        "FLEX2": "",
        "FLEX10": null,
        "FLEX55": "",
        "FLEX15": "240",
        "APPROVAL_DESC": "The text for approval 2",
        "APPROVAL_STATUS": "Y",
        "CFLEX116": false,
        "CFLEX117": "",
        "CFLEX54": "",
        "CFLEX3": "",
        "CFLEX26": null
    },
    {
        "IS_PERIOD_LOCKED": "N",
        "HAS_COPY_ROW": 2,
        "STATUS_VAL": "",
        "CHANNEL_CODE": "GS105",
        "CHANNEL_NAME": "GS105",
        "FLEX1": "",
        "QUANTITY": 234,
        "FLEX4": "454646",
        "FLEX5": "",
        "FLEX6": "AAAA",
        "FLEX7": "",
        "FLEX8": "reerwe",
        "FLEX9": "g",
        "FILE_ROW_NUMBER": "",
        "FILE_NAME": "",
        "FLEX135": "",
        "FLEX2": "",
        "FLEX10": null,
        "FLEX55": "",
        "FLEX15": "240",
        "APPROVAL_DESC": "",
        "APPROVAL_STATUS": "",
        "CFLEX116": false,
        "CFLEX117": "",
        "CFLEX54": "",
        "CFLEX3": "",
        "CFLEX26": null
    },
    {
        "IS_PERIOD_LOCKED": "N",
        "HAS_COPY_ROW": 2,
        "STATUS_VAL": "",
        "CHANNEL_CODE": "GS106",
        "CHANNEL_NAME": "GS106",
        "FLEX1": "",
        "QUANTITY": 255,
        "FLEX4": "454646",
        "FLEX5": "",
        "FLEX6": "AAAA",
        "FLEX7": "",
        "FLEX8": "reerwe",
        "FLEX9": "g",
        "FILE_ROW_NUMBER": "",
        "FILE_NAME": "",
        "FLEX135": "",
        "FLEX2": "",
        "FLEX10": null,
        "FLEX55": "",
        "FLEX15": "240",
        "APPROVAL_DESC": "",
        "APPROVAL_STATUS": "",
        "CFLEX116": false,
        "CFLEX117": "",
        "CFLEX54": "",
        "CFLEX3": "",
        "CFLEX26": null
    },
    {
        "IS_PERIOD_LOCKED": "N",
        "HAS_COPY_ROW": 2,
        "STATUS_VAL": "",
        "CHANNEL_CODE": "GS107",
        "CHANNEL_NAME": "GS107",
        "FLEX1": "",
        "QUANTITY": 12,
        "FLEX4": "454646",
        "FLEX5": "",
        "FLEX6": "AAAA",
        "FLEX7": "",
        "FLEX8": "reerwe",
        "FLEX9": "g",
        "FILE_ROW_NUMBER": "",
        "FILE_NAME": "",
        "FLEX135": "",
        "FLEX2": "",
        "FLEX10": null,
        "FLEX55": "",
        "FLEX15": "240",
        "APPROVAL_DESC": "",
        "APPROVAL_STATUS": "",
        "CFLEX116": false,
        "CFLEX117": "",
        "CFLEX54": "",
        "CFLEX3": "",
        "CFLEX26": null
    }
]; 
      const fields = {
    "IS_CHECKED": {
        "type": "",
        "hidden": false,
        "filterable": false,
        "sortable": false
    },
    "CHANNEL_ID": {
        "editable": false,
        "type": "number",
        "hidden": true,
        "defaultValue": -1
    },
    "ITEM_ID": {
        "editable": false,
        "type": "number",
        "hidden": true,
        "defaultValue": -1
    },
    "IS_PERIOD_LOCKED": {
        "editable": false,
        "type": "string",
        "hidden": false,
        "defaultValue": "N",
        "sortable": false
    },
    "HAS_COPY_ROW": {
        "editable": false,
        "type": "number",
        "hidden": false,
        "defaultValue": 0,
        "sortable": false
    },
    "ROWID": {
        "editable": false,
        "type": "string",
        "hidden": true,
        "defaultValue": "-1"
    },
    "CHANNEL_CODE": {
        "hidden": false,
        "type": "string"
    },
    "CHANNEL_NAME": {
        "hidden": false,
        "type": "string"
    },
    "MANUALLY_CHANGED": {
        "editable": false,
        "type": "string",
        "hidden": true,
        "defaultValue": "N"
    },
    "FLEX1": {
        "type": "string",
        "hidden": false
    },
    "QUANTITY": {
        "type": "number",
        "hidden": false
    },
    "FLEX4": {
        "type": "string",
        "hidden": false
    },
    "FLEX5": {
        "type": "string",
        "hidden": false
    },
    "FLEX6": {
        "type": "string",
        "hidden": false
    },
    "FLEX7": {
        "type": "string",
        "hidden": false
    },
    "FLEX8": {
        "type": "string",
        "hidden": false
    },
    "FLEX9": {
        "type": "string",
        "hidden": false
    },
    "FILE_ROW_NUMBER": {
        "type": "string",
        "hidden": false
    },
    "FILE_NAME": {
        "type": "string",
        "hidden": false
    },
    "FLEX135": {
        "type": "string",
        "hidden": false
    },
    "FLEX2": {
        "type": "string",
        "hidden": false
    },
    "FLEX10": {
        "type": "date",
        "hidden": false
    },
    "FLEX55": {
        "type": "string",
        "hidden": false
    },
    "FLEX15": {
        "type": "string",
        "hidden": false
    },
    "APPROVAL_DESC": {
        "type": "string",
        "hidden": false
    },
    "APPROVAL_STATUS": {
        "type": "string",
        "hidden": false
    },
    "CFLEX116": {
        "type": "boolean",
        "hidden": false
    },
    "CFLEX117": {
        "type": "string",
        "hidden": false
    },
    "CFLEX54": {
        "type": "string",
        "hidden": false
    },
    "CFLEX3": {
        "type": "string",
        "hidden": false
    },
    "CFLEX26": {
        "type": "date",
        "hidden": false
    }
};
        $(document).ready(function() {
            $("#grid").kendoGrid({
                dataSource: {
                    data: data,
                    schema: {
                        model: {
                            fields: fields
                        }
                    },
                    pageSize: 20
                },
              	columns: columns,
                height: 550,
              	navigatable: true,
                sortable: true,
                groupable: true,
                resizable: true,
                pageable: true,
                
            });
        });
    </script>
</div>



</body>
</html>

Unplanned
Last Updated: 27 Oct 2026 09:42 by ADMIN
Scheduled for 2026 Q4
Created by: Tom
Comments: 2
Category: Kendo UI for jQuery
Type: Bug Report
1

Description

When navigating in Grid with default/default-ocean-blue-a11y theme the border is gray, while it should be black

Steps to Reproduce

Steps to reproduce the behavior:

1. Open the demos: https://demos.telerik.com/kendo-ui/grid/keyboard-navigation?autoRun=true&theme=default-ocean-blue-a11y or https://www.telerik.com/kendo-angular-ui/components/grid/keyboard-navigation
2. Select the Default theme Ocean Blue A11Y swatch

Expected Behavior

The border color of the focused elements should be black.

Actual Behavior

The border color is gray

image-20261020-114218.png

Version Information

Working Version

  • Version: 14.1.0

Broken Version

  • Version: 14.5.0

Environment Information

Affected Theme(s)

  • Default theme

Affected Suites

  • Kendo UI for jQuery
  • Kendo UI for Angular
  • Kendo UI for React
  • Kendo UI for Vue
  • Telerik UI for Blazor
  • Telerik UI for ASP.NET Core
  • Telerik UI for ASP.NET MVC

Browser Information

  • All browsers

Impact Assessment

Severity

  • Low - Minor visual issue
Unplanned
Last Updated: 23 Oct 2026 13:49 by ADMIN
Created by: Michael D
Comments: 1
Category: Kendo UI for jQuery
Type: Bug Report
0

The Kendo Chart widget's documentation describes the setting messages.noData. However, it is missing in the typescript typings.

The documentation matches the source code, but the typings do not.

In Development
Last Updated: 23 Oct 2026 08:00 by ADMIN
Created by: Stu
Comments: 5
Category: Kendo UI for jQuery
Type: Bug Report
0

there is no binding for noData

e.g.

        noData?: boolean | undefined;

    interface ChartOptions {
        name?: string | undefined;
        autoBind?: boolean | undefined;
        axisDefaults?: ChartAxisDefaults | undefined;
        categoryAxis?: ChartCategoryAxisItem | ChartCategoryAxisItem[] | undefined;
        chartArea?: ChartChartArea | undefined;
        dataSource?: any|any|kendo.data.DataSource | undefined;
        legend?: ChartLegend | undefined;
        panes?: ChartPane[] | undefined;
        pannable?: boolean | ChartPannable | undefined;
        pdf?: ChartPdf | undefined;
        persistSeriesVisibility?: boolean | undefined;
        plotArea?: ChartPlotArea | undefined;
        renderAs?: string | undefined;
        series?: ChartSeriesItem[] | undefined;
        seriesColors?: any;
        seriesDefaults?: ChartSeriesDefaults | undefined;
        theme?: string | undefined;
        subtitle?: string | ChartSubtitle | undefined;
        title?: string | ChartTitle | undefined;
        tooltip?: ChartTooltip | undefined;
        transitions?: boolean | undefined;
        valueAxis?: ChartValueAxisItem | ChartValueAxisItem[] | undefined;
        xAxis?: ChartXAxisItem | ChartXAxisItem[] | undefined;
        yAxis?: ChartYAxisItem | ChartYAxisItem[] | undefined;
        zoomable?: boolean | ChartZoomable | undefined;
        axisLabelClick?(e: ChartAxisLabelClickEvent): void;
        dataBound?(e: ChartDataBoundEvent): void;
        drag?(e: ChartDragEvent): void;
        dragEnd?(e: ChartDragEndEvent): void;
        dragStart?(e: ChartDragStartEvent): void;
        legendItemClick?(e: ChartLegendItemClickEvent): void;
        legendItemHover?(e: ChartLegendItemHoverEvent): void;
        legendItemLeave?(e: ChartLegendItemLeaveEvent): void;
        noteClick?(e: ChartNoteClickEvent): void;
        noteHover?(e: ChartNoteHoverEvent): void;
        noteLeave?(e: ChartNoteLeaveEvent): void;
        paneRender?(e: ChartPaneRenderEvent): void;
        plotAreaClick?(e: ChartPlotAreaClickEvent): void;
        plotAreaHover?(e: ChartPlotAreaHoverEvent): void;
        plotAreaLeave?(e: ChartPlotAreaLeaveEvent): void;
        render?(e: ChartRenderEvent): void;
        select?(e: ChartSelectEvent): void;
        selectEnd?(e: ChartSelectEndEvent): void;
        selectStart?(e: ChartSelectStartEvent): void;
        seriesClick?(e: ChartSeriesClickEvent): void;
        seriesHover?(e: ChartSeriesHoverEvent): void;
        seriesOver?(e: ChartSeriesOverEvent): void;
        seriesLeave?(e: ChartSeriesLeaveEvent): void;
        zoom?(e: ChartZoomEvent): void;
        zoomEnd?(e: ChartZoomEndEvent): void;
        zoomStart?(e: ChartZoomStartEvent): void;
    }

 

Declined
Last Updated: 22 Oct 2026 15:03 by ADMIN
Created by: eDAD
Comments: 5
Category: Kendo UI for jQuery
Type: Bug Report
0

After applying filter or page number, the table content gets changed but the screen reader didn't inform about the same.

Repro-Steps:

  1. Open the WPG - Home URL in browser.
  2. Now, navigate to table in table in scan mode.
  3. Observe the issue.

 

Actual Result:

After performing below action's, the table content gets changed but the narrator didn't announce about the content change:

  • After applying filter (any), if data shown as well as if no content found.
  • After selecting page no.

Expected Result:
The narrator should announce about change in the data table as soon as the filter applied, or page get changed.


User Impact:

Users who rely on screen readers are getting confused if the focus lands on the icon and only announces link without announcing the name of the link.
Unplanned
Last Updated: 22 Oct 2026 13:36 by ADMIN
Created by: Lee
Comments: 6
Category: Kendo UI for jQuery
Type: Feature Request
1
Please create a new widget or modify the existing dropdownlist component to allow the user to make more than one selection. The existing multiselect component is not sufficient in that it cannot be modified to look and operate like the dropdown list. This confuses users and makes the controls in a form feel like they came from two different libraries. The major difference is the placement and appearance of the search. In the dropdown list, the search is inside of the list and always 100% width. In the multiselect the search is invisible and inside the selected values box. Our clients are requesting a new tool where the search in the multiselect looks and operates like the search in the dropdownlist and have gone as far as to ask us to ditch Kendo UI for another library.
Unplanned
Last Updated: 22 Oct 2026 13:23 by ADMIN
One of my schedulers has an optional title field. The title is computed in these cases based on other properties on the event. An example could be an event that contains a “category” of “Break” and an employee of “Bob”. The title if empty might return “Break for Bob”. When we edit this event and choose a new category, the save works, and the new event coming in with the SignalR update contains the new “title” property as needed. But the event does not update in the DOM. It looks to be skipped somehow. This required a bunch of JavaScript to fix. Need to enumerate all events coming in the SignalR post, then enumerate all DOM elements for events in that scheduler, and manually update the DOM text for the event
Completed
Last Updated: 22 Oct 2026 09:39 by ADMIN

I created a forum post and it was suggested that I create a feature request for improved Kendo Grid keyboard accessibility when the grid contains locked columns and/or clickable elements such as buttons, links, and input boxes. I noted the following issues that I feel should be supported without having to write a bunch of workarounds or create a poor user experience for regular (mouse and keyboard) users. 

This is an urgent concern because many of our clients are requiring our site to meet accessibility standards and with the heavy use of Kendo grids in their current state, it does not seem to.

I have a grid with 2 locked columns with a button in the first column and a hyperlink in the second column, the other columns just have text. I set navigatable to true. None of my fields are editable.

Here is a dojo: https://dojo.telerik.com/KUcMekCh

When the user tabs to the grid, they first get the search bar in my custom grid toolbar. Next they tab to the button (which happens to be a bootstrap dropdown menu but I don't think that is relevant). Here is where the issues start:

  1. They then hit tab again and sometimes are taken to the hyberlink while other times they are taken to the next row, skipping column 2's hyperlink. 
  2. The grid does not always enter Kendo's navigation mode. When it doesn't, there is no way for the user to interact with the column header which has the sort and tooltip buttons in it.
  3. When they get to the bottom of the grid, the locked side will scroll vertically but the unlocked side remains in place, causing the rows to be misaligned.
  4. When an input cell is in the unlocked portion of the table, the user has to tab through the entire list before getting back to editing the input for a row. This isn't logical.
  5. I worry that if there were editable cells, which some of my grids have, the user won't be able to tab to the next editable cell and instead will be forced to navigate through every cell. I don't want to make it more difficult for a normal user in order to accommodate a keyboard only user so there needs to be a way for both to work well.
  6. Often the focus ends up on the unlocked table which attempts to put a blue outline around that, however, the outline isn't fully visible since that is inside of a scrollable div.
  7. You can click into a cell with navigatable set to true and then use the navigation but that doesn't work for a keyboard only user.
  8. When navigatable is not turned on, the user cannot scroll vertically if they tab to the table.
Unplanned
Last Updated: 22 Oct 2026 07:22 by ADMIN
Created by: Jonas
Comments: 2
Category: Kendo UI for jQuery
Type: Feature Request
1

Good morning,

currently the compatible JQuery versions are only listed in this article: https://docs.telerik.com/kendo-ui/intro/supporting/jquery-support.

Most of the time also with great delay (as of today: 3 versions behind)

Would it be possible to include the compatible versions directly into the Release Notes of new versions?

This way we can safely upgrade JQuery along with new Kendo UI Releases.

Unplanned
Last Updated: 21 Oct 2026 12:52 by ADMIN

When adding a command to a column, passing the command options via an array or not makes a difference only for the visible option of the command. See DoJo:
Kendo UI Snippet | Kendo UI Dojo (telerik.com)

All options for command work both with and without the array, except the visible function. 

Unplanned
Last Updated: 21 Oct 2026 12:43 by ADMIN

Require an Editor method to provide the cursor position as an integer representing the offset of the current cursor position from the start of the document with respect to the text displayed in the editor.

For example consider an editor displaying 'This is text content'. The underlying html will be <p><span>This is text content</span></p>. When cursor is placed after 'text', I would like to obtain the cursor position as 12 i.e. the offset based on the text displayed irrespective of the underlying html.

Unplanned
Last Updated: 21 Oct 2026 11:31 by ADMIN
Created by: David
Comments: 2
Category: Kendo UI for jQuery
Type: Bug Report
0

Bug report

Reproduction of the problem

Dojo example.

Current behavior

A difference between kendo.culture.ar.min.js:

pattern: ["-n %","n %"],

and other Arabic cultures, e.g. kendo.culture.ar-AE.min.js:

pattern: ["-n%","n%"],

A space is present in between the % symbol and the number and the position of the percent symbol differs.

Expected/desired behavior

Format consistency.

Environment

  • Kendo UI version: 2019.2.619
  • jQuery version: x.y
  • Browser: [all]
Unplanned
Last Updated: 21 Oct 2026 11:24 by ADMIN
Created by: Francis
Comments: 3
Category: Kendo UI for jQuery
Type: Feature Request
31

https://svelte.dev/

Looks to be so much better than React.

 

Completed
Last Updated: 21 Oct 2026 10:35 by ADMIN
Created by: Kenji
Comments: 2
Category: Kendo UI for jQuery
Type: Feature Request
5
Completed
Last Updated: 21 Oct 2026 06:58 by ADMIN
Created by: Software
Comments: 2
Category: Kendo UI for jQuery
Type: Feature Request
1

Hi Team,

I would like to request the functionality to be able to export (an) Excel file(s) with the built-in Kendo UI API into a ZIP file. 

Thank you! 

Unplanned
Last Updated: 21 Oct 2026 06:29 by ADMIN
Created by: KM
Comments: 1
Category: Kendo UI for jQuery
Type: Feature Request
4
Completed
Last Updated: 20 Oct 2026 12:59 by ADMIN
Created by: zahra
Comments: 2
Category: Kendo UI for jQuery
Type: Bug Report
1

Hi

I found bug into the Items of Tab component.

When you create Tab and write 3 TabItems for it, all of the component are correct but when you want create other tab into the first or second part of TabItem with 2 tabitems, you will expect to see one main Tab with 3 TabItems and other Tab with 2 Tabitems into the first tabItem of first Tab. But you will see one Tab with 5 Tabitems So main Tab merge all of TabItems with together.

 


<Tab id="mainTab">
    <TabItem id="item1">
          <Tab id="childTab">
               <TabItem id="childItem1">
                    Content 1
                </TabItem>
                  <TabItem id="childItem2">
                    Content 2
                </TabItem>
           </Tab>
     </TabItem>
     <TabItem id="item2">
             Content 2
     </TabItem>
     <TabItem id="item3">
             Content 3
      </TabItem>
</Tab>

Thanks for solving this problem or for guiding me.

Completed
Last Updated: 20 Oct 2026 12:38 by ADMIN
Created by: Paul
Comments: 5
Category: Kendo UI for jQuery
Type: Bug Report
0

I see this most often in the All Day slot of the Timeline view. I do not believe it is isolated to just that though. Here's using the native code:

Here's the same page with the code fixed:

Please note that two events are covered up: recur3 and an event that is NOT an all day event starting at 2pm. That's what the gap is. So yes, this gap is correct. Also note: In the first window I can press F12 to open the inspector, and manually delete the event elements which reveal the missing ones underneath. They are overlaid on top of each other.

After some debugging, here is the fix. The file, version, method, and line numbers are all here for you. The fix is highlighted on line 2855. The highlighted "start" should be "end".

Completed
Last Updated: 19 Oct 2026 13:29 by ADMIN
Created by: n/a
Comments: 2
Category: Kendo UI for jQuery
Type: Bug Report
0

When using Kendo's Upload component when you select a file/files to upload there is a 20% chance that it will upload the same file twice. We switched auto upload off to help, but when you delete one of the dupped files the upload button disappears causing you to delete both of them and then re-upload the file.

Upload Code -

 var w = $("#winFiles").data("kendoWindow");
                w.setOptions({
                    width: $(window).width() - 150,
                    height: $(window).height() - 150
                });
w.center().open();
                $("body").on("click", "#lnkShowUpload", function () { showWinUpload(associationId, typeId) });

 

function showWinUpload(associationId, typeId) {
var w = $("#winUpload").data("kendoWindow");
    $("#fileUpload").kendoUpload({
async: {
                        saveUrl: `/api/File/?typeId=${typeId}&associationId=${associationId}`,
                        autoUpload: false
                    },
                    validation: {
                        allowedExtensions: ["pdf", "jpg", "img", "png", "gif", "doc", "docx", "xls", "xlsx", "csv", "txt"]
                    }
});
                w.setOptions({
                    height: $(window).height() - 175
                });
w.center().open();
}


1 2 3 4 5 6