2011-07-12 58 views
0

我想在用戶按下ctrl + enter時輸入ajax請求,同時在Ext.form.field.HtmlEditor中輸入文本(xtype:'htmleditor '),但我不知道該怎麼做。
'htmleditor'旁邊的'按鈕'可以發送'htmleditor'的值,但是我想用Ctrl + Enter爲該操作添加鍵盤快捷鍵。
會感謝一些幫助。Catch Ctrl + Enter當用戶在Ext.form.field.HtmlEditor中輸入文本時

編輯:這需要與ExtJS4進行 - 不知何故,我必須添加類似「按鍵」監聽我的HTML編輯對象...
這裏是代碼..

this.htmleditor = this.addComment.add({ 
    region:'center', 
    xtype:'htmleditor', 
    margin:'0 0 0 0', 
    enableSourceEdit:false, 
    height:200 
}); 

回答

4

您無法偵聽默認htmleditor中的事件。所以你需要使用它的更新版本。

此代碼可以幫助你(它是ExtJS的3,所以也許你需要改變它的第4版):

Cyber.ui.HtmlEditor = Ext.extend(Ext.form.HtmlEditor, { 
     frame : true, 
     initComponent : function() { 
      Cyber.ui.HtmlEditor.superclass.initComponent.call(this); 
      this.addEvents('submit'); 
     }, 
     initEditor : function() { 
      Cyber.ui.HtmlEditor.superclass.initEditor.call(this); 
      if (Ext.isGecko) { 
       Ext.EventManager.on(this.doc, 'keypress', this.fireSubmit, 
         this); 
      } 
      if (Ext.isIE || Ext.isWebKit || Ext.isOpera) { 
       Ext.EventManager.on(this.doc, 'keydown', this.fireSubmit, 
         this); 
      } 
     }, 
     fireSubmit : function(e) { 
      if (e.ctrlKey && Ext.EventObject.ENTER == e.getKey()) { 
       // Do what you need here 
      } 
     } 
}); 

Ext.reg('customeditor', Cyber.ui.HtmlEditor); 

而且在你的表格:

this.htmleditor = this.addComment.add({ 
    region:'center', 
    xtype:'customeditor', 
    margin:'0 0 0 0', 
    enableSourceEdit:false, 
    height:200 
}); 

我與Extjs 4玩了很多,並找到了方法(您需要在使用htmleditor之前包含此代碼):

Ext.form.HtmlEditor.override({ 
    frame : true, 
    initComponent: function() { 
     this.callOverridden(); 
     this.addEvents('submit'); 
    }, 

    initEditor : function() { 
     this.callOverridden(); 

     var me = this; 
     var doc = me.getDoc(); 

     if (Ext.isGecko) { 
      Ext.EventManager.on(doc, 'keypress', me.fireSubmit, me); 
     } 

     if (Ext.isIE || Ext.isWebKit || Ext.isOpera) { 
      Ext.EventManager.on(doc, 'keydown', me.fireSubmit, me); 
     } 
    }, 

    fireSubmit : function(e) { 
     if (e.ctrlKey && Ext.EventObject.ENTER == e.getKey()) { 
      // Do what you need here 
      alert('yes!'); 
     } 
    } 
}); 
+0

謝謝,它「摧毀」htmleditor的一些部分......並且當我按下ctrl + enter時它會凍結(警惕()),所以我認爲這可能會有所幫助,但我從未使用過extjs3我對extjs4很新,所以你可以幫我轉換嗎? – T1000

+0

@ T1000 - 我已經更新了我的答案,因此您可以嘗試extjs4的正確版本。 – Andron

+0

非常感謝Andron。 +1 – T1000

0

this你在做什麼(已經在堆疊:P)? Ctrl+Enter jQuery in TEXTAREA

$('#textareaId').keydown(function (e) { 
e = e || event; // for compatibility with IE (i belive) 
    if (e.ctrlKey && e.keyCode == 13) { 
    // Ctrl-Enter pressed 
    } 
}); 
+0

謝謝,但...我忘了注意它必須用extjs完成...不能用jQuery完成,我沒有在任何地方使用#ID(所以getElementById()也是無用的)。 HTMLEditor對象是assignet到主對象中的變量......像this.htmlEditor。所以我需要爲this.htmlEditor獲取按鍵事件,但在xtype事件中沒有按鍵事件:htmleditor – T1000

+0

啊。嗯,你可以修改textarea HTML元素嗎?你可以做''textarea onkeydown =「javascript:checkKeys()」>' 'function checkKeys(){var e = window.event; if(e.ctrlKey && e.keyCode == 13)runAjax(); }'編輯:啊我看到o_O不要再想了,對不起!這兩個其他答案可能知道更多關於它:p – Benno

+0

它不是一個textarea它是extjs4的Ext.form.field.HtmlEditor! – T1000

相關問題