如何触发按键

时间:2011-05-02 18:33:41

标签: javascript jquery fckeditor

我有(2)textareas。一个是常规文本区域,另一个是(F)CKEditor的参考。当用户键入(F)CKEditor时,我希望每个按键被触发并显示在常规文本区域中。我该怎么做?

这是我的非工作代码:

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我有一个javascript代码来验证 Enter 按键

希望它可以帮到你

 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
}



}
相关问题