Я использую jQuery для обработки события keydown в html-дереве. Как видно из кода, я работаю с клавишей табуляции, чтобы она проходила по дереву. Но если он дойдет до конца дерева, я бы хотел, чтобы он вышел из дерева и в следующее доступное поле. Я пытался вернуть истину в этом случае, но это не работает.
Это также препятствует функционированию других клавиш. Например, я также хотел бы, чтобы работали CTRL + R, но он ничего не делает, когда я сосредоточен на дереве.
Я возвращаюсь до вызова e.stopPropagation()
и e.preventDefault()
, поэтому я ожидаю, что мое событие будет обнаружено обработчиками браузера по умолчанию, но это не так. Я читал в других постах, что нет способа принудительно установить поведение по умолчанию, поэтому я думаю, что лучше всего было бы просто прекратить обработку события и передать его, но оно не передается. Кто-нибудь знает почему?
$(treeItem).keydown(function(e) {
return onKeyDown(obj, e);
});
var onKeyDown = function(obj, e) {
if (!obj.isRoot) {
switch (e.keyCode) {
case keyCode.LEFT: collapseNode(obj); break;
case keyCode.RIGHT: expandNode(obj); break;
case keyCode.UP: stepUpTree(obj); break;
case keyCode.DOWN: stepDownTree(obj); break;
case keyCode.TAB: if (e.shiftKey) stepUpTree(obj); else stepDownTree(obj); break;
case keyCode.ENTER: me.activateNode(obj); break;
default: return true;
}
}
e.stopPropagation();
e.preventDefault();
}
EDIT
Я обновил код, чтобы более точно отражать происходящее. Теперь стало понятнее, в чем проблема. Событие присоединяется к элементу элемента списка, поэтому, когда я возвращаю true, оно продолжает работать со всеми предками, пока не доберется до корня. В этот момент поведение по умолчанию остановлено. Решение состоит в том, чтобы предотвратить поведение по умолчанию только тогда, когда я знаю, что нужно, вместо того, чтобы делать его поведением по умолчанию.