Вопрос по jquery, php – введите ключ для сохранения значений текстовой области

3

Привет, у меня есть ckeditor и одна кнопка для сохранения текста ckeditor с ajax.

<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();
Как использовать ckeditor для ввода текста? для ввода события можно вставить полный код? behzad n
Прослушайте событие нажатия клавиши на теле, проверьте, введено ли оно. Если это введите, сохраните форму. Это звучит как очень плохая идея, хотя, это меняет нормальное использование текстовой области и может помешать навигации с помощью клавиатуры Kevin B
Вы можете использоватьinput вместоtextarea. Alessandro Vendruscolo

Ваш Ответ

4   ответа
7

что содержимое в CKEditor является iframe, поэтому те решения, которые пытаются проверить нажатия клавиш в текущем документе, потерпят неудачу.

Это простое решение с использованием событий CKEditor и без использования какой-либо внешней библиотеки:

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

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

Вы можете проверить это здесь:http://jsfiddle.net/zjkSR/ (посмотрите на вашу консоль)

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
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>
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededjsfiddle.net/nanoquantumtech/nbVeC
Error: User Rate Limit Exceeded
0

keyup или жеkeydown событие с JQuery, и проверьтеkeyCode изevent чтобы увидеть, была ли нажата клавиша ввода.

Например:

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

Ссылка на Javascript keyCode:http://asquare.net/javascript/tests/KeyCode.html

Изменить: ой, неправильно прочитанный вопрос - см обновленный ответ. Изменен селектор на целевое тело вместо текстовой области, но, как сказал @KevinB, вероятно, плохая идея.

Error: User Rate Limit Exceeded behzad n
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 Editor. Лучший способ сделать это - добавить что-то подобное в ваш конфигурационный файл:

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 Событие при вводе, но будет сохранять другие нажатия по умолчанию.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded behzad n
Error: User Rate Limit Exceeded behzad n

Похожие вопросы