繁体   English   中英

WordPress插件中的jQuery冲突-jQuery与WordPress核心

[英]jQuery conflict in WordPress Plugin - jQuery vs. WordPress Core

我有一个使用jQuery 1.4定制开发的WordPress插件,由于某种原因,它与WordPress js代码的核心冲突...不确定,但我认为它也是jQuery,不是吗?

无论如何,我以为我使用的是这个日期选择器脚本,称为“ anytime.js”,但是在调试之后,事实证明,在删除插件中的“ anytime.js”链接之后,冲突仍然在发生,但最终在我得到解决后,摆脱了jquery.1.4.min.js的链接...

那么,关于如何避免冲突的任何想法? 是基于WordPress jQuery的,这是原因还是其他原因?

以下是在插件中找到的相关代码:

function datepicker_header(){
    $theme_dir = get_bloginfo('wpurl').'/wp-content/plugins/postevents/js/';?>

    <link rel="stylesheet" type="text/css" href="<?=$theme_dir?>anytime.css" />
    <link rel="stylesheet" type="text/css" href="<?=$theme_dir?>ui.css" />

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type='text/javascript'></script>
    <script src="<?=$theme_dir?>anytime.js" type='text/javascript'></script>

    <script type="text/javascript">
        $(function(){
            AnyTime.picker( "startdate", { format: "%m-%d-%Y", firstDOW: 1, baseYear: '<?=date('Y')?>', earliest: '<?=date('m-d-Y')?>' } );
            AnyTime.picker( "enddate", { format: "%m-%d-%Y", firstDOW: 1, baseYear: '<?=date('Y')?>', earliest: '<?=date('m-d-Y')?>'  } );
        });
    </script>

编辑

我想我可能引起了一些混乱。 我应该解释功能。 有一个名为“ Post Events”的插件,具有基于jQuery的datepicker。 datepicker依靠jQuery来运行。 具体且不寻常的问题是,当插件处于活动状态时,它将导致新的WordPress 3.0可拖动菜单从WP管理面板中失败。 所有其他功能均正常运行,但是,禁用日期选择器不会导致菜单变为可拖动状态。 相反,仅删除上面代码中的“ /libs/jquery/1.4.2 ...”链接会导致菜单再次变为可拖动状态。

编辑#2

虽然我只能指出一个正确的答案,但必须同时使用@Matthew和@polarblau的更正才能解决此问题!

尝试:

jQuery(function(){
    AnyTime.picker( "startdate", { format: "%m-%d-%Y", firstDOW: 1, baseYear: '<?=date('Y')?>', earliest: '<?=date('m-d-Y')?>' } );
    AnyTime.picker( "enddate", { format: "%m-%d-%Y", firstDOW: 1, baseYear: '<?=date('Y')?>', earliest: '<?=date('m-d-Y')?>'  } );
});

通常,将使用jQuery的脚本和插件包装到自己的作用域中是一个好习惯:

(function($){
    //... your plugin, etc. here
})(jQuery);

请参阅以下有关将脚本正确添加到Wordpress的链接: http : //weblogtoolscollection.com/archives/2010/05/06/adding-scripts-properly-to-wordpress-part-1-wp_enqueue_script/

是的,Wordpress使用JQuery来实现某些功能...

此代码将检查是否已加载jQuery ...如果尚未加载,则将其加载(此代码从Google代码加载-如果愿意,您可以将URL更新为本地文件)。

if(typeof(jQuery)=='undefined'){
    var loadjQuery = document.createElement("script");
    loadjQuery.setAttribute("type","text/javascript");
    loadjQuery.setAttribute("src","http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js");
    document.getElementsByTagName("head")[0].appendChild(loadjQuery);
}

但是,我确实要注意,只有在另一个潜在的jQuery实例之后加载它才能起作用(无法保证jQuery的实例不会在以后加载,除非它执行相同的检查)。

这在某些时候加载jQuery并且无论如何都需要始终加载它的情况下很有用。 在这种情况下,请将此代码放置在原始代码加载之后的某个时刻,但要使用任何jQuery功能。

还有一件事:有时WordPress在jQuery代码中使用$会引起麻烦。 您可以通过简单地键入“ jQuery ”(或执行查找/替换)而不是在需要$的任何位置输入$来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM