2011-05-02 54 views
0

我有(2)textareas。一個是常規textarea,另一個是(F)CKEditor的參考。當用戶輸入(F)CKEditor時,我希望每個按鍵被觸發並顯示在常規textarea中。我該怎麼做呢?如何觸發按鍵

這是我的非工作代碼:

 CKEDITOR.instances.ckeditor1.on('key', function (e) 
     { 
      var je = $.Event("keyup"); 
      je.which = e.data.keyCode; 
      textArea.bind(je, private.bindKeyup); 
      textArea.trigger(je); 
     }); 

回答

1

我可以看到有幾個理由說明你的例子不起作用。

  • 我很肯定在按鍵事件期間,鍵被添加到textarea中。它可能是keydown。但絕對不是關鍵事件。
  • ckeditor事件附帶的keyCode不能直接傳遞給textarea。它有關於alt,ctrl和shift鍵是否被按下的信息。你需要首先將它們去掉。 (請參閱下面我創建rawKey變量的示例)

您還可能想要從事件處理程序中刪除textarea.bind()調用。將它放在那裏意味着每次在ckeditor中按下一個鍵時,您將綁定另一個事件處理程序副本到textarea。可能不是你想要的。

不管怎麼說,這是我的樣本

function onEditorKeyEvent(event) { 
    var rawKey = event.data.keyCode & ~(CKEDITOR.SHIFT | CKEDITOR.CTRL | CKEDITOR.ALT); 

    var eventData = 
    { 
    altKey: !!(event.data.keyCode & CKEDITOR.ALT), 
    ctrlKey: !!(event.data.keyCode & CKEDITOR.CTRL), 
    shiftKey: !!(event.data.keyCode & CKEDITOR.SHIFT), 
    keyCode: rawKey, 
    which: rawKey 
    }; 

    var myTextbox = $('#myTextBox'); 
    triggerKeyEvents(eventData, myTextbox); 
} 

function triggerKeyEvents(eventData, elementToTriggerOn) 
{ 
    // these key events can generate an extra keyUp event for some reason if they are done in the same thread. 
    //so we just do them on a different thread :-) 
    setTimeout(this.callback(function() { 
    var keydownEvent = jQuery.Event('keydown', eventData); 
    elementToTriggerOn.trigger(keydownEvent); 

    if (!keydownEvent.isDefaultPrevented()) { 
     elementToTriggerOn.trigger(jQuery.Event('keypress', eventData)); 
    } 

    elementToTriggerOn.trigger(jQuery.Event('keyup', eventData)); 
    }), 1); 
} 
0

我有一個JavaScript代碼來驗證輸入按鍵

希望它可以幫助你

function enterKeyValidate(e) 
{ 
    var key;  
    if(window.event) 
      key = window.event.keyCode; //IE 
    else 
      key = e.which; //firefox  

if(key==13) 
{ 
    alert('dont press Enter you @@@$$$#####') 
    return false 
} 



}