Сделайте TinyMCE + JEditable отправить после нажатия Ctrl + S - PullRequest
2 голосов
/ 20 апреля 2011

Обновлено: 13 мая 2011 г.

Пожалуйста, найдите решение в моем ответе ниже.


Обновлено: 5 мая 2011 г.

Итак, теперь у меня проблема в том, что я хочу вызвать кнопку JEdtiable submit после нажатия Ctrl + S. Великий Тариама показал часть Ctrl + S для TinyMCE, так что теперь я должен выяснить, как я получу JEditable для отправки.

После нажатия Ctrl + S я попытался найти кнопку отправки и щелкнуть ее в соответствии с вызовом отмены на jeditable . Не работает

Вот мой соответствующий код для инициализации JEditable:

    //Edit Note
$(function(){
   $(".edit").editable('ajax/save.php?editnotetext', {
      type : 'mce',
      submit : '<button class="save_button">Save</button>',
      cancel: 'Cancel',
      event: 'dblclick',
      indicator : 'Saving...',
      tooltip : 'Doubleclick to edit...',
      onblur: 'ignore',
      width : '700px',
      height : '100px'
   });
});

А вот мой код для попытки отправить его

var receiveShortCutEvent = function(e) {
  if (e.ctrlKey){
        //console.log('e.keyCode:',e.keyCode);
        var handled = true; // default case set this to false which lets the browser execute a browsershortcut if existent
        switch (e.keyCode){   // be careful that keyCode may differ in browsers sometimes 
          case 83 : 
              $('.edit').find('.save_button').click();
              break;

          default : handled = false;
        }
    }
};

Любые мысли приветствуются!


28 апреля 2011

Использование TinyMCE с JEditable (согласно http://sam.curren.ws/index.cfm/2008/6/12/jEditable-TinyMCE-Plugin). После редактирования моего контента я хотел бы отправить его, нажав Ctrl + S. К сожалению, ничего не отправлено, и у меня осталось исходное содержимое. работает, если я нажимаю кнопку отправки.

Я пробовал:

$(function(){
    $(".edit").keypress(function(event) {
        if ((event.which == 115 && event.ctrlKey)){
            alert("you pressed ctrl-s!");
            $(this).submit();
        }
    });


   $(".edit").editable('ajax/save.php?editnotetext', {
      type : 'mce',
      submit : 'save',
      cancel: 'cancel',
      indicator : 'Saving...',
      tooltip : 'Click to edit...',
      onblur: 'ignore',
      width : '500px',
      height : '100px'
   });
});

Ответы [ 3 ]

1 голос
/ 21 апреля 2011

Это несколько особенная вещь для достижения. Проблема здесь в том, что tinymce (и каждый могущественный rte) использует iframe для редактирования контента. Это приводит к проблеме, заключающейся в том, что iframe «ловит» все события клавиатуры, когда iframe имеет фокус. Я покажу вам, что я делаю, чтобы решить эту проблему

В вашем initym (или одном из ваших плагинов) вам нужно установить следующее

// 83 instead of 73 as keyCode here !!!!!!!!
setup : function(ed) {
 ed.onKeyDown.add(function(ed, evt) {

    // catch crtl+s, use receiveShortCutEvent in the html-document
  if (evt.keyCode == 83 && evt.ctrlKey && !evt.shiftKey && !evt.altKey && !evt.metaKey) {
    setTimeout(function(){
      var e = { type : 'keydown'};
      e.charCode = e.keyCode = e.which = 83;
      e.shiftKey = e.altKey = e.metaKey = false;
      e.ctrlKey = true;
      window.parent.receiveShortCutEvent(e); // !!! delegate created event object
    }, 1);
  }
 });
},

в html-документе (или включенном js-файле) вам нужно установить это

// init in the main document
// Keydown events on the main document will call receiveShortCutEvent
$(document).bind('keydown', function(e)
{
    var handled = receiveShortCutEvent(e); 
    return !handled;
});

вам нужно будет определить, что делать для какого ярлыка и здесь

var receiveShortCutEvent = function(e)
{
  if (e.ctrlKey){
    //console.log('e.keyCode:',e.keyCode);
    var handled = true; // default case set this to false which lets the browser execute a browsershortcut if existent
    switch (e.keyCode){   // be careful that keyCode may differ in browsers sometimes 
      case 83 : 
          alert("you pressed ctrl-s!");
          break;

      default : handled = false;
  }
}
1 голос
/ 20 апреля 2011

Взгляните на эти плагины jquery для создания сочетаний клавиш.Это может быть то, что вы ищете.

горячие клавиши

js-горячие клавиши

0 голосов
/ 11 мая 2011

РЕШЕНИЕ 1: НЕ ИСПОЛЬЗОВАТЬ TINYMCE

Если вы не используете TinyMCE с JEditable, посмотрите на пост Армана П. по адресу Вызовите кнопку отправки JEdtiable, изменив плагин .

РЕШЕНИЕ 2: ИСПОЛЬЗОВАНИЕ TINYMCE

Как указывает Thariama, Tinymce использует iframe для редактирования содержимого.Это приводит к проблеме, заключающейся в том, что iframe будет «ловить» все события клавиатуры, когда iframe имеет фокус.Поэтому вам нужно изменить настройку tinymce.

Сначала идет инициализация JEditable, но вы даете кнопке сохранения класс, который мы назовем "save_button":

    $(".edit").editable('ajax/save.php?editnotetext', {
        type : 'mce',
        submit : '<button class="save_button">Save</button>',
        ...
    });

При инициализации TinyMCE вы должны создать установку, которая перехватывает Ctrl + S и отправляет кнопки класса save_button:

   tinyMCE.init({
    ...
    setup : function(ed) {
     ed.onKeyDown.add(function(ed, evt) {
        // catch crtl+s, use receiveShortCutEvent in the html-document
        if (evt.keyCode == 83 && evt.ctrlKey && !evt.shiftKey && !evt.altKey && !evt.metaKey) {
           evt.preventDefault();
           $('.save_button').submit();
       }
     });
   }

  });
...