用于WordPress小部件的markItUp
我正在使用markItUp作为WP小部件中的textarea(即,在创建和编辑小部件时,在widgets.php页面上)。
当我第一次打开小部件时,textarea是markItUp’ed,但是在我点击保存后,function丢失了,我又回到了普通的textarea。
我比较了页面的保存前和保存后版本的源代码,没有区别 – 显然,因为页面没有重新加载。 是否需要为每个ajax调用调用jQuery?
我尝试添加
jQuery(".markitup").markItUp(mySettings);
在窗口小部件的表单处理function内,但没有帮助。 我试图将此事件的更改绑定到保存按钮,但这似乎没有什么区别(我很有可能把它弄错了)。
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
。 代码现在是正确的。
道格的解决方案非常有效。 我只需要更改window.setTimeout函数,如下所示:
window.setTimeout( function(){ $("textarea.markItUp").each(function () { if (!($(this).hasClass('markItUpEditor'))) { $(this).markItUp(mySettings); } }); }, 200 );