2011-11-05 39 views
0

刚刚开始使用Ace编辑器(http://ace.ajax.org),虽然它在常规编辑器上工作正常,但只要我把它放在一个具有'modal:true'选项的jquery-ui对话框中,除了输入文本外,我可以做任何事情。也就是说,我可以选择,使用ctrl组合,甚至可以删除文本,但是我不能插入字母。箭头键和删除Ace编辑器中的工作,但键入文本不起作用

任何想法如何'模态:真'选项可能会干扰常规字符插入?是否有一个'stopPropagation'函数可以阻止关键笔划进入编辑器?

+0

你使用的是什么样的对话框? – polarblau

回答

1

问题是jQuery对话框在允许事件继续之前在目标元素(在本例中,Ace编辑器的textarea)上寻找z索引。在写这篇文章的时候,这是他们做此项检查:

jquery.ui.dialog.js开始上线685

create: function(dialog) { 
    if (this.instances.length === 0) { 
    ... 
    setTimeout(function() { 
     // handle $(el).dialog().dialog('close') (see #4065) 
     if ($.ui.dialog.overlay.instances.length) { 
     $(document).bind($.ui.dialog.overlay.events, function(event) { 
      // stop events if the z-index of the target is < the z-index of the overlay 
      // we cannot return true when we don't want to cancel the event (#3523) 


      // HERE's THE CHECK 
      if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { 
      return false; 
      } 
     }); 
     } 
    }, 1); 

有几种方法来处理这个,但我发现最简单的将Ace的textarea的z-index设置为一个非常高的值。这里就是我这样做的CSS的一部分:在开始上线16211.

"\n" + 
".ace_editor textarea {\n" + 
" position: fixed;\n" + 
" z-index: 2000;\n" + 
1

我设法通过调整与jQuery的CSS,而不是编辑王牌源来实现这个

ace_uncomplessed.js。

$('.ace_editor textarea').css('z-index','2000');