用于Wordpress小部件的markItUp

时间:2010-01-02 01:51:46

标签: jquery ajax wordpress markitup

我正在使用markItUp作为WP小部件中的textarea(即,在创建和编辑小部件时,在widgets.php页面上)。

当我第一次打开小部件时,textarea是markItUp',但是在我点击保存之后,功能丢失了,我又回到了普通的textarea。

我比较了页面的保存前和保存后版本的源代码,没有区别 - 显然,因为页面没有重新加载。是否需要为每个ajax调用调用jQuery?

我尝试添加

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

在窗口小部件的表单处理函数中,但没有帮助。 我试图将此事件的更改绑定到保存按钮,但这似乎没有什么区别(很有可能我错了)。

2 个答案:

答案 0 :(得分:3)

jQuery

因此,您需要做的第一件事就是挂钩AJAX调用,以便在保存小部件时通知您。为此,我们将使用jQuery ajaxSuccess函数。把它放在自己的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);

PHP / WordPress

最后,告诉WP在小部件页面上包含新的js文件 。您需要将其合并到functions.php中,或者如果要构建小部件,则将其合并到小部件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' );

修改我发布时,我的add_action挂钩不正确。它需要我刚刚添加的.php。代码现在是正确的。

答案 1 :(得分:1)

Doug的解决方案非常有效。我只需要更改window.setTimeout函数,如下所示:

 window.setTimeout( function(){
   $("textarea.markItUp").each(function () {
      if (!($(this).hasClass('markItUpEditor'))) {
          $(this).markItUp(mySettings);
      }
    });                                    
 }, 200 );