Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Диалог пользовательского интерфейса ckeditor и jquery не работает

Автор вопроса: mauzillaОтветов: 3

Я бесконечно пытался, теперь вы разрешите эту крайне разочаровывающую ситуацию, в которой я оказался. Я пытаюсь заставить ckEditor работать в диалоговом окне пользовательского интерфейса jQuery. Редактор включен отлично, и он заменяет текстовое поле на скин ckeditor, но я не могу редактировать/добавлять контент в блоке контента. Единственное рабочее решение, которое я видел сейчас, это если я нажму "Исходный код" в редакторе и отменю его, я смогу добавить к нему контент.

Моя реализация была просто <script type='text/javascript' src='ckeditor/ckeditor.js'></script>, и я не добавлял никакой дополнительной информации/кода. Любые идеи?

jqueryckeditorjquery-ui

Ответы

Ответ 1 · рейтинг 2 · KaZ

Была такая же проблема,

удаление эффектов из модального помогло : Удалено :

show: "scale",
hide: "puff",

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

$("#report").dialog({
        title: "<?php echo caption("REPORT_EDITOR"); ?>",
        bgiframe: true,
          autoOpen: false,
          width: 990,
          height: 620,
          modal: true,

          draggable: true,
          resizable: true,
          resizeStop: function(event, ui) {
              var y = $(event.target).height();
              repEditor.resize( "99%", y - 10 );
          },

          buttons: {
            'Close': function() {
              $(this).dialog('close');
            }
          }
        });

Ответ 2 · рейтинг 2 · Igor

Для версий jQuery-UI (1.10+) и jQuery (1.10+) и CKEditor 3.6 это решение похоже работает:

_moveToTop: function( event, silent ) {
    var $parent = this.uiDialog.parent();
    var $elementsOnSameLevel = $parent.children();

    var heighestZIndex = 0;
    $.each($elementsOnSameLevel, function(index, element) {
        var zIndexOfElement = $(element).css('z-index');
        if (zIndexOfElement) {
            var zIndexOfElementAsNumber = parseInt(zIndexOfElement) || 0;
            if (zIndexOfElementAsNumber > heighestZIndex) {
                heighestZIndex = zIndexOfElementAsNumber;
            }
        }
    });
    var currentZIndex = this.uiDialog.css('z-index');

    var moved;
    if (currentZIndex >= heighestZIndex) {
        moved = false;
    } else {
        this.uiDialog.css('z-index', heighestZIndex + 1);
        moved = true;
    }

    if ( moved && !silent ) {
        this._trigger( "focus", event );
    }

    return moved;
}

Вы можете либо отредактировать файл в строке (не рекомендуется), либо просто переопределить функциональность jQuery-UI по умолчанию в отдельном файле JS, который загружается после jQuery-UI, но до создания диалогового окна.

$.widget("ui.dialog", $.ui.dialog, {
    _moveToTop: function( event, silent ) {
        //Logic from above
    }
});

Ответ 3 · JamesVB

В качестве альтернативы, чтобы сохранить анимацию "показать" и "скрыть", создайте свой экземпляр редактора после завершения события "показать" с функцией обратного вызова для завершения: опция "показать"

$("#report").dialog({
    title: "<?php echo caption("REPORT_EDITOR"); ?>",
    bgiframe: true,
      autoOpen: false,
      width: 990,
      height: 620,
      modal: true,

      // start my suggestion
      show: {
          effect: "scale",
          complete: function() {
            $( "#selector" ).ckeditor();
          }
      },

      hide: "puff",
      // end my suggestion

      draggable: true,
      resizable: true,
      resizeStop: function(event, ui) {
          var y = $(event.target).height();
          repEditor.resize( "99%", y - 10 );
      },

      buttons: {
        'Close': function() {
          $(this).dialog('close');
        }
      }
    });

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы