Я выделил это из # 2164. Эта проблема действительно связана с тем, что программы чтения с экрана не могут прочитать содержимое редактора. Я хочу поговорить о более простой проблеме доступности:
Если у вас есть Ace в форме, и вы перемещаетесь по форме от поля к полю, то, как только вы попадаете в Ace, вы застреваете, потому что тогда Tab делает отступ для текущей строки кода (что очень естественно). Это проблема для нас, и лучшее решение, которое я смог придумать, это следующее:
Мы вводим два режима для каждого экземпляра редактора:
При этом поведение выглядит следующим образом:
Из-за 1) вы можете просто пройти через всю форму, не застревая, как и следовало ожидать. Из-за 2), когда вы набираете код, Tab делает отступ для текущей строки, как и следовало ожидать. 3) и 4. Сделайте возможным побег.
Это не идеально. Я вижу некоторые проблемы: могут ли это обнаружить новые пользователи? Есть ли видимая (или звуковая) индикация того, в каком режиме вы находитесь? Я чувствую, что указание может быть хорошим. С другой стороны, занимать место на экране или заставлять программу чтения с экрана что-либо говорить (когда вы хотите сконцентрироваться на том, что вы набираете, или на том, где вы находитесь в форме), кажется нежелательным. Если бы поведение было достаточно естественным, это не имело бы значения.
Если людям нравится это предложение, я с радостью попробую его кодировать.
Эта идея звучит интересно и будет полезна в качестве дополнительного расширения, я не уверен, что включить ее по умолчанию, поскольку на многих сайтах есть собственный способ навигации между элементами, например, в Cloud9 есть ярлыки для фокусировки определенных элементов, таких как дерево файлов или терминал. и ctrl-cmd-arrow для переключения фокуса между панелями редактора.
Спасибо за ответ.
Звучит как хорошее решение.
@timhunt , ты это
К сожалению, нет - по крайней мере, не в Ace. Мы использовали Ace внутри типа вопроса CodeRunner для Moodle, и оказалось, что проще реализовать то, что мы хотели, в слое клея: https://github.com/trampgeek/moodle-qtype_coderunner/blob/master/amd/src /aceinterface.js.
Однако вы можете скопировать любой из этих кодов.
У меня та же проблема с Ace, и это обходной путь, который я придумал.
Используйте функцию setCommandEnabled из https://stackoverflow.com/questions/24963246/ace-editor-simply-re-enable-command-after-disabled-it
Затем настройте редактор следующим образом:
editor.on('focus', function() {
setCommandEnabled(editor, "indent", true)
setCommandEnabled(editor, "outdent", true)
})
editor.commands.addCommand({
name: "escape",
bindKey: {win: "Esc", mac: "Esc"},
exec: function() {
setCommandEnabled(editor, "indent", false)
setCommandEnabled(editor, "outdent", false)
}
});
Работает сносно. Нажмите Escape и Tab / Shift + Tab, и вы покинете редактор Ace, и следующий / предыдущий фокусируемый элемент получит фокус.
Использование Ctrl + [вместо Shift + Tab и Ctrl +] вместо Tab работает в редакторе ace, поэтому просто удалена команда табуляции и теперь нет ловушки
aceEditor.commands.removeCommand (aceEditor.commands.byName.indent);
aceEditor.commands.removeCommand (aceEditor.commands.byName.outdent);
На Mac я мог использовать Option + Tab для выхода
Самый полезный комментарий
Эта идея звучит интересно и будет полезна в качестве дополнительного расширения, я не уверен, что включить ее по умолчанию, поскольку на многих сайтах есть собственный способ навигации между элементами, например, в Cloud9 есть ярлыки для фокусировки определенных элементов, таких как дерево файлов или терминал. и ctrl-cmd-arrow для переключения фокуса между панелями редактора.