Я использую Dojo 1.2 для реализации некоторых функций на веб-странице моего клиента. Один из виджетов, которые я использую, - это dijit.layout.TabContainer, унаследованный от StackContainer. StackContainer подписывается на события клавиатуры и создает несколько горячих клавиш, например, стрелку влево для перемещения на одну вкладку влево и так далее.
Теперь к вопросу: я хотел бы отключить эту функцию горячих клавиш в моем TabContainer. Есть ли параметр конфигурации, который я могу установить (не могу найти в API) для достижения этого, или мне придется взломать код Dojo или, возможно, создать свои собственные версии StackContainer и TabContainer, чтобы избавиться от горячих клавиш? Я, конечно, предпочел бы не связываться с кодом Dojo.
С уважением / Фредрик



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я здесь просто кодирую без манжеты и вообще не тестировал. Я делаю это викифицированным, поэтому, если есть какие-то проблемы, разместите правильный источник.
Используйте следующий JavaScript в файле с именем com/stackoverflow/KeyPresslessTabContainer.js:
dojo.provide("com.stackoverflow. KeyPresslessTabContainer");
dojo.require("dijit.layout. TabContainer");
dojo.declare("com.stackoverflow.KeyPresslessTabContainer", dijit.layout. TabContainer, {
_controllerWidget: "com.stackoverflow.KeyPresslessTabController"
});
dojo.declare("com.stackoverflow.KeyPresslessTabController", dijit.layout.TabController, {
/*
* this is the important part. The original code was:
* templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>"
* In the template below, we remove the onkeypress listener,
* and thus key presses should be ignored.
*/
templateString: "<div wairole='tablist'></div>"
});
Просто замените _onKeyPress пустым телом:
<div dojoType='dijit.layout.TabContainer'> <script type='dojo/method' event='_onKeyPress'></script> ... <div>
Работает как шарм.
В последних версиях Dojo заменяемая функция теперь называется
_onKeyDown.