2012-05-15 48 views
3

您好我有ckeditor和一个按钮用于保存ckeditor文本蒙山阿贾克斯。输入密钥保存文本区域值

<textarea id="editor1" name="editor1"></textarea> 
<input type="button" name="send" id="send" value="Send" onclick="save()"> 

我想删除按钮,并在按键输入保存文本蒙山AJAX(运行保存功能) 但是当按下CKEditor的换行符进入。以及如何使用输入交换按钮?

<textarea id="editor1" name="editor1"></textarea> 
if (enter press in any where web page) do save(); 
+1

的解决方案,因为这使用CKEditor的事件和不依赖于任何外部库一样简单按键事件,检查是否输入。如果是输入,则保存表单。这听起来像一个非常糟糕的主意,虽然,它可以改变一个textarea的正常使用,并且可以与 –

+0

您可能需要使用'textarea'的'input' instad键盘导航干扰。 –

+0

如何使用ckeditor输入文字?输入事件可以插入完整的代码? –

回答

7

重要的是CKEditor中的内容是一个iframe,所以那些试图检查当前文档按键的解决方案将会失败。

var editor = CKEDITOR.replace('editor1'); 

editor.on('key', function(ev) { 
    if (ev.data.keyCode==13) 
    { 
     ev.cancel(); 
     console.log('enter'); 
    }  
}); 

你可以在这里进行测试:http://jsfiddle.net/zjkSR/ (看看你的控制台)

+0

Thx man ...我也有同样的问题这是工作... – Kenjiro

+0

谢谢你。 – sehummel

0

你需要做的是捕获与jQuery的keyup或​​事件,并检查eventkeyCode,看它是否是进入按下该键。

如:

$('body').on('keyup', function(event){ 
    if (event.keyCode===13) 
    { 
     alert('enter key pressed!'); 
     save(); 
    } 
}); 

的Javascript键代码参考:http://asquare.net/javascript/tests/KeyCode.html

编辑:哎呀,误解的问题 - 看到更新的答案。将选择器更改为目标主体而不是textarea,但正如@KevinB所说,可能是一个坏主意。

+0

我测试此代码“$(‘#editor1’)。在(‘KEYUP’,函数(事件)......”但对我来说不是工作:( –

0
$(document).ready(function() { 
    //set up the editor instance for ckeditor 
    var editor = CKEDITOR.replace(
     'editor1', 
     { 
      toolbar: 
      [ 
       ['Source'], 
       ['Cut', 'Copy', 'PasteText'], 
       ['Undo', 'Redo', '-', 'SelectAll', 'RemoveFormat'], 
       ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink'], ['SpecialChar'] 
      ] 
     } 
    );  

    $('body').on('keypress', function (e) { 
     if (e.target.id !== "editor1" && (e.keyCode ? e.keyCode : e.which) === 13) 
     { 
      alert(e.target.id); // jquery ajax save function 
     } 
    }); 
}); 

<textarea id="editor1" rows="5" cols="50"></textarea> 
+0

-1我不喜欢的代码没有任何解释......请添加一些获得+1 – Christoph

+0

用户想要的是回车键事件(而不是在textarex)文本框中值应保存 – Thulasiram

+0

测试,但不适合现场演示工作 –

1

这是我的一个站点创建而回代码,它可以让你提交的输入,但是可以让你按住Shift + Enter以创建新行(为自动提交文本区域应该) 。

它使用jQuery编写。

var TextBox = $('.autosubmit'); 
    var code =null; 
    // on keypress do this 
    TextBox.keyup(function(e) 
    { 
     // get keycode 
     code= (e.keyCode ? e.keyCode : e.which); 
     // if keycode is 13 (enter) 
     if (code == 13 && e.shiftKey) { 
      var content = this.value; 
      var caret = getCaret(this); 
      this.value = content.substring(0,caret)+"\n"+content.substring(carent,content.length-1); 
      event.stopPropagation(); 
     } else if (code == 13) { 
      $(this).closest("form").submit(); 
     } 
    }); 

    function getCaret(el) { 
     if (el.selectionStart) { 
     return el.selectionStart; 
     } else if (document.selection) { 
     el.focus(); 

     var r = document.selection.createRange(); 
     if (r == null) { 
     return 0; 
     } 

     var re = el.createTextRange(), 
     rc = re.duplicate(); 
     re.moveToBookmark(r.getBookmark()); 
     rc.setEndPoint('EndToStart', re); 

     return rc.text.length; 
     } 
     return 0; 
    } 

但是,我不确定它会在CK编辑器中工作。要做到这一点,最好的方法是这样的事情添加到您的配置文件:

config.keystrokes = 
[ 
    [ CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ], 
    [ CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ], 

    [ CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ], 

    [ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ], 
    [ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ], 
    [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ], 

    [ CKEDITOR.CTRL + 76 /*L*/, 'link' ], 

    [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ], 
    [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ], 
    [ CKEDITOR.CTRL + 85 /*U*/, 'underline' ], 

    [ CKEDITOR.ALT + 109 /*-*/, 'toolbarCollapse' ], 
    [ 13, 'save'] // note this line 
]; 

这将增加对进入save事件,但将保留其他默认按键。

+0

在ckeditor配置文件中添加键击但仍然输入换行符 –

+0

抱歉,使用了错误的语法配置文件。现在修复。 – Nick

+0

谢谢,但还没有工作,当进入按下换行符 –