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