簡體   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