EasyUI Forum
April 20, 2024, 06:30:34 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: Complete tree keyboard navigation  (Read 7092 times)
hahamed
Newbie
*
Posts: 13


View Profile
« on: August 23, 2015, 04:42:15 AM »

Hello,
Use and reply. I think it has not bug.
Improved:
Code:
$.extend($.fn.tree.methods, {
    nav: function (jq, dir) {
        return jq.each(function () {
            var nodes = $(this).tree('getChildren');
            if (!nodes.length) return;
            var node = $(this).tree('getSelected');
            if (!node) { $(this).tree('select', dir == 'down' ? nodes[0].target : nodes[nodes.length - 1].target); }
            else {
                if (dir == 'left') {
                    if (!$(this).tree('isLeaf', node.target) && node.state == "open") $(this).tree('collapse', node.target);
                    else {
                        var parent = $(this).tree('getParent', node.target);
                        if (parent) $(this).tree('select', parent.target);
                    }
                } else if (dir == 'right') {
                    if (!$(this).tree('isLeaf', node.target)) $(this).tree('expand', node.target);
                } else {
                    var index = 0;
                    for (var i = 0; i < nodes.length; i++) if (nodes[i].target == node.target) { index = i; break; }
                    if (dir == 'down') { if (index == nodes.length - 1) index = 0; else while (index < nodes.length - 1) { index++; if ($(nodes[index].target).is(':visible')) break; } }
                    else if (dir == 'up') { if (index == 0) index = nodes.length - 1; else while (index > 0) { index--; if ($(nodes[index].target).is(':visible')) break; } }
                    if ($(nodes[index].target).is(':visible')) $(this).tree('select', nodes[index].target);
                }
            }
        });
    }
});

and call nav:
Code:
tree.attr('tabindex', 1).bind('keydown', function (e) {
        var selected = tree.tree('getSelected');
        switch (e.keyCode) {
            case 13: // Enter
                if (selected) $(selected.target).trigger('click');
                break;
            case 38: // up
                tree.tree('nav', 'up');
                break;
            case 40: // down
                $(this).tree('nav', 'down');
                break;
            case 37: // right
                $(this).tree('nav', 'right');
                break;
            case 39: // left
                $(this).tree('nav', 'left');
                break;
        }
});

thanks from msg4344
« Last Edit: August 23, 2015, 11:54:35 PM by hahamed » Logged
xarn
Newbie
*
Posts: 9


View Profile Email
« Reply #1 on: February 21, 2017, 03:49:44 AM »

Please note that the left/right keycodes were inverted. It should be:
Code:
            case 39: // right
                $(this).tree('nav', 'right');
                break;
            case 37: // left
                $(this).tree('nav', 'left');
                break;
Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!