[英]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.