es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

bootbox con ck_editor no puede tener acceso a caracteres especiales.

Estoy usando el bootbox con un ck_editor adentro, cuando selecciono los caracteres especiales desde la barra de herramientas la ventana está desactivada. Tengo esta función que hará la sustitución y se muestra correctamente, pero no puedo acceder a esa ventana. ¿Existe un evento para SpecialChar en el que pueda obtener el enfoque?

function prepCkeditor() {
    var editor = CKEDITOR.instances['txtAddCompany'];
    if (!editor) {
        CKEDITOR.replace('txtAddCompany', {
            enterMode: CKEDITOR.ENTER_BR,
            height: 35,
            entities: false,
            contentsCss: 'body {overflow:hidden;font-family:"Raleway", "Open Sans", sans-serif; font-size: 14px;color:#555;}',
            resize_enabled: false,
            toolbar:
                [
                    { name: 'tools', items: ['SpecialChar', '-', 'Source', '-', 'Maximize'] }
                ]
        });
    } 
}

Ventana desactivada al seleccionar caracteres especiales

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que cuando se hace clic en el botón “SpecialChar” en la barra de herramientas de CKEditor, la ventana se desactiva y el usuario no puede acceder a ella. La función prepCkeditor() se utiliza para preparar la instancia de CKEditor e inicializarla con varias configuraciones, incluida la barra de herramientas que incluye el botón “SpecialChar”.

    Para resolver el problema, el usuario está preguntando si existe un evento para el botón “SpecialChar” en el que puedan enfocarse. Sin embargo, después de revisar la documentación de CKEditor, no parece tener un evento específico para el botón “SpecialChar”.

    Una posible solución podría ser agregar un “event listener” a la instancia de CKEditor y escuchar los clics en el botón “SpecialChar”. Cuando se hace clic en el botón, el usuario puede usar la función setTimeout() para retrasar la ejecución de su función de reemplazo durante unos milisegundos, lo que podría dar tiempo suficiente a la ventana para que vuelva a estar activa antes de que se ejecute la función de reemplazo.

    function prepCkeditor() {
      var editor = CKEDITOR.instances['txtAddCompany'];
      if (!editor) {
        CKEDITOR.replace('txtAddCompany', {
          enterMode: CKEDITOR.ENTER_BR,
          height: 35,
          entities: false,
          contentsCss: 'body {overflow:hidden;font-family:"Raleway", "Open Sans", sans-serif; font-size: 14px;color:#555;}',
          resize_enabled: false,
          toolbar: [{
            name: 'tools',
            items: ['SpecialChar', '-', 'Source', '-', 'Maximize']
          }]
        });
    
        // Agregar el evento
        editor.on('instanceReady', function() {
          // Obtener el elemento del botón "SpecialChar"
          var specialCharElement = editor.ui.get('SpecialChar');
    
          // Agregar el "event listener" al elemento del botón
          specialCharElement.on('click', function() {
            // Retrasar la ejecución de la función de reemplazo
            setTimeout(function() {
              replaceFunction();
            }, 100);
          });
        });
      }
    }
    
    function replaceFunction() {
      // Esta función reemplaza texto en el editor
      // Agrega tu código aquí
    }
    

    Este código agrega un “event listener” a la instancia editor con el evento instanceReady, que se dispara cuando la instancia de CKEditor está completamente cargada y lista para usar. Dentro de la función oyente, el código obtiene el elemento del botón “SpecialChar” utilizando el método editor.ui.get(), y luego agrega un “event listener” de clic a este elemento utilizando el método on().

    Cuando se hace clic en el botón “SpecialChar”, la función de reemplazo se retrasa durante 100 milisegundos utilizando la función setTimeout(). Esto debería dar tiempo suficiente a la ventana para que vuelva a estar activa antes de que se ejecute la función de reemplazo.

    Esta es solo una posible solución y es posible que no funcione en todos los casos, pero vale la pena intentarlo.

Comments are closed.