我使用的王牌编辑器构建一个码重播节目。 我店当你输入代码按下所有按键,然后我重播他们的王牌编辑器。 我已经完成存储和重放所有的键盘/鼠标输入,但我有回放选项卡机的问题。
王牌编辑处理一个textarea DOM中的多个标签。 对于当按下标签textarea中的默认行为是移动到下一个DOM,所以我知道他们正在使用的preventDefault(),并为了让softTab(1,2,3插入,或4个空格前,用自己的处理程序所有突出显示的文本)。
我的目标是使王牌编辑器来触发标签事件 - 例如,无论是目前的王牌编辑聚焦的标签在正确数量的空格。 有谁知道如何做到这一点?
这里有一个选项列表我试过,为什么他们不工作:
- 商店标签印刷机上的keydown,然后计算该列的值,并插入在该位置的空间。 但是 - 当你有一些文字一半突出失败。 正确的功能应该转移到整个字,但是这也只是插入空格在单词中间。
- 按存放位置和按键每当editor.on(“变化”,some_event_handler)火灾,这给了我什么是输入和位置(完美的重播),除了它不告诉我,是否按下选项卡或空格键(它会火既和空格已被处理)。 加这仍然在该位置(可能在一个字,而不是移字以上的中间),如1号插入空格。
例如:
editor.getSession().on('change', function(e) {
if (handlers) {
var text = e.data.text;
if (text == ' ' || text == ' ' || text == ' ' || text == ' ') {
//FAILS because it doesn't know if its space or a single space tab.
- 试图欺骗埃斯编辑器通过存储“/ T”并将其插入到所述王牌编辑器来触发一个标签。
例如(存储代码):
function keypress_handler(e) {
var key = e.which;
var text = String.fromCharCode(key);
switch(key) {
case 9: //Tab
text = '\t'; // manually add tab
//Code to store this event for replay later
break;
}
例如(重放代码):
// Assuming the cursor/selection is in the correct position
editor.insert(log.text);
在这一点上,我开始想从头开始构建选项卡(在转向多的事情,如果选择了多条线路,在多大程度上转移,如何处理如果按下标签当一个字半高亮显示),但王牌显然已经这是否被按下标签时,所以我想只是触发标签印刷机。 通常情况下触发选项卡机,我会简单地做:
// trigger an artificial Tab Keydown event for Ace Editor using jQuery
var tab_press= $.Event('keydown');
tab_press = 9; // Tab keycode
$('.editor').trigger(tab_press);
但是,这会导致没有行为的结果。 有什么建议么?