Pregunta

Estoy utilizando markItUp de un área de texto en un widget de WP (es decir, en la página widgets.php, mientras que la creación y edición de un widget).

El área de texto es markItUp'ed cuando abra por primera vez el widget, pero después de que haga clic en Guardar la funcionalidad se pierde y estoy de vuelta a un área de texto normal.

Me comparó el código fuente para el antes y después de-Save-Guardar versiones de la página y no hay diferencia -obviamente, ya que la página no se vuelve a cargar. ¿El jQuery necesidad de ser invocada para cada llamada AJAX?

He intentado añadir

jQuery(".markitup").markItUp(mySettings);

Dentro de la función de manipulación de formas del widget, pero eso no ayuda. Traté de hacer cambios de enlace a este evento en el botón Guardar demasiado pero eso no pareció hacer una diferencia (hay una oportunidad buena que lo tengo todo mal).

¿Fue útil?

Solución

El jQuery

Por lo tanto, lo primero que hay que hacer es gancho en la llamada AJAX para que se le notifique cuando los reproductores se han guardado. Para ello, utilizaremos la función jQuery ajaxSuccess. Poner esto en su propio archivo js:

// Use a self executing function so we can safely use
// $ inside and know it = jQuery
(function($){

    // Tie into all jQuery AJAX requests
    $(document).ajaxSuccess(function(e, x, o){

        // Make sure our widget is the one being saved
        // id_base will equal whatever is set in the PHP for the widget
        // In this example, we target the text widget 
        if(o.data && o.data.indexOf('id_base=text') > -1){

           // Now, lets quickly find all the right elements
           // and filter out the ones already set up, and finally
           // apply the `markItUp` call, but we will delay just to give
           // WP a chance to update the widget
           window.setTimeout( function(){
               $("textareas.markItUp:not(.markItUpEditor)").markItUp(mySettings);
           }, 200 );
        }
    });

})(jQuery);

El PHP / WordPress

Por último, dice WP para incluir el nuevo archivo js solamente en la página de widgets. Usted tendrá que incorporar esta bien en functions.php o si usted está construyendo un widget, en los widgets de archivo PHP:

function register_markitup(){
    wp_enqueue_script( 'markitup-widgets', WP_PLUGIN_URL . '/your-plugin/js/markitup-ajax.js' );
}

add_action( "admin_print_scripts-widgets.php", 'register_markitup' );

Editar que tenía un gancho add_action incorrecta cuando me envió. Es necesaria la .php la que me acaba de agregar. El código es correcto ahora.

Otros consejos

La solución de Doug funcionó muy bien. Yo sólo tenía que cambiar la función window.setTimeout de la siguiente manera:

 window.setTimeout( function(){
   $("textarea.markItUp").each(function () {
      if (!($(this).hasClass('markItUpEditor'))) {
          $(this).markItUp(mySettings);
      }
    });                                    
 }, 200 );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top