2011-05-02 55 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 
} 



}