我在管理栏中添加了一个菜单项,它执行一些Javascript来显示调试信息。问题是,单击此项目也会重新加载页面。我如何防止这种情况?
我试图加快调试速度(&A);开发人员的东西,并希望使用jQuery向我的主包装器div添加一个类。
第1步:
在头部添加样式
function my_admin_bar_script_def( $script ) {
$script = \'
jQuery(document).ready( function() {
jQuery("li#wp-admin-bar-showdebug").click( function() {
jQuery(".wrap").toggleClass("showdebug");
} )
} );
\';
return print $script;
}
add_action( \'wp_head\', \'my_admin_bar_script_def\', 11 );
步骤2:添加管理栏菜单项:
function my_admin_bar_class_switch() {
global $wp_admin_bar;
$wp_admin_bar->add_menu(
array(
\'parent\' => \'theme_options\'
,\'title\' => __( \'showdebug\', TEXTDOMAIN )
,\'href\' => \'\' // **interesting problem over here**
)
);
}
add_action( \'admin_bar_menu\', \'my_admin_bar_class_switch\', 70 );
问题:每次触发切换功能时,都会启动链接并重新加载页面。因此,您将再次获得初始触发器。无法更换链接,因为在
$args
的数组
add_menu()
函数仅定义
href
无论如何,链接都会被打印出来。过滤器还是挂钩?不可用。
最合适的回答,由SO网友:Jan Fabry 整理而成
如果你return false
在该Javascript函数中,不会传播单击,也不会重新加载页面。
更好的是,you can specify a onclick
attribute for a menu item. 所以你的定义是:
function my_admin_bar_class_switch( &$wp_admin_bar ) {
// $wp_admin_bar is passed by reference, you don\'t need the global var
$wp_admin_bar->add_menu(
array(
\'parent\' => \'theme_options\'
,\'title\' => __( \'showdebug\', AHF_LANG )
,\'href\' => \'\' // This can stay empty
,\'meta\' => array(
\'onclick\' => \'jQuery(".wrap").toggleClass("showdebug"); return false;\'
)
)
);
}
add_action( \'admin_bar_menu\', \'my_admin_bar_class_switch\', 70 );
在这种情况下,您不需要连接
onclick
亲自参加活动。我发现还有两个可能的错误:
wp_head
是一个操作,而不是筛选器,因此通过返回脚本,它将不会被打印。此外,您依赖
showdebug
作为
id
, 但由于您没有指定ID,因此它是从标题生成的。如果该字符串被翻译,则该ID将不会保持不变。